サブクエリに基づいて、相関サブクエリを使用せずに結合のみを使用して問題を解決できるようです。ただし、クエリの一部しか操作できないため、確認するのは困難です。これが、質問を投稿する際に、できるだけ多くの関連コードを投稿することをお勧めする理由です。それにもかかわらず、私が収集したものから、あなたは次のようなものを持っています:
SELECT ( SELECT SUM(chh2.cha_meblag)
FROM dbo.CARI_HESAP_HAREKETLERI chh2
WHERE chh2.cha_normal_Iade = 1
AND chh2.cha_kod = ch.cari_kod
AND chh2.cha_tarihi >= '20130101'
AND chh2.cha_tarihi <= '20130131'
) AS Ocai,
( SELECT SUM(chh2.cha_meblag)
FROM dbo.CARI_HESAP_HAREKETLERI chh2
WHERE chh2.cha_normal_Iade = 1
AND chh2.cha_kod = ch.cari_kod
AND chh2.cha_tarihi >= '20130201'
AND chh2.cha_tarihi <= '20130228'
) AS Ocai,
... etc for 12 months
FROM SomeTable ch
これを次のように変えることができます:
SELECT ch.cari_kod,
[20130101] = ISNULL([20130101], 0),
[20130201] = ISNULL([20130201], 0),
[20130301] = ISNULL([20130301], 0),
[20130401] = ISNULL([20130401], 0),
[20130501] = ISNULL([20130501], 0),
[20130601] = ISNULL([20130601], 0),
[20130701] = ISNULL([20130701], 0),
[20130801] = ISNULL([20130801], 0),
[20130901] = ISNULL([20130901], 0),
[20131001] = ISNULL([20131001], 0),
[20131101] = ISNULL([20131101], 0),
[20131201] = ISNULL([20131201], 0)
FROM SomeTable
LEFT JOIN
( SELECT chh2.cha_kod,
[20130101] = SUM(CASE WHEN chh2.cha_tarihi >= '20130101' AND chh2.cha_tarihi < '20130201' THEN chh2.cha_meblag ELSE 0 END),
[20130201] = SUM(CASE WHEN chh2.cha_tarihi >= '20130201' AND chh2.cha_tarihi < '20130301' THEN chh2.cha_meblag ELSE 0 END),
[20130301] = SUM(CASE WHEN chh2.cha_tarihi >= '20130301' AND chh2.cha_tarihi < '20130401' THEN chh2.cha_meblag ELSE 0 END),
[20130401] = SUM(CASE WHEN chh2.cha_tarihi >= '20130401' AND chh2.cha_tarihi < '20130501' THEN chh2.cha_meblag ELSE 0 END),
[20130501] = SUM(CASE WHEN chh2.cha_tarihi >= '20130501' AND chh2.cha_tarihi < '20130601' THEN chh2.cha_meblag ELSE 0 END),
[20130601] = SUM(CASE WHEN chh2.cha_tarihi >= '20130601' AND chh2.cha_tarihi < '20130701' THEN chh2.cha_meblag ELSE 0 END),
[20130701] = SUM(CASE WHEN chh2.cha_tarihi >= '20130701' AND chh2.cha_tarihi < '20130801' THEN chh2.cha_meblag ELSE 0 END),
[20130801] = SUM(CASE WHEN chh2.cha_tarihi >= '20130801' AND chh2.cha_tarihi < '20130901' THEN chh2.cha_meblag ELSE 0 END),
[20130901] = SUM(CASE WHEN chh2.cha_tarihi >= '20130901' AND chh2.cha_tarihi < '20131001' THEN chh2.cha_meblag ELSE 0 END),
[20131001] = SUM(CASE WHEN chh2.cha_tarihi >= '20131001' AND chh2.cha_tarihi < '20131101' THEN chh2.cha_meblag ELSE 0 END),
[20131101] = SUM(CASE WHEN chh2.cha_tarihi >= '20131101' AND chh2.cha_tarihi < '20131201' THEN chh2.cha_meblag ELSE 0 END),
[20131201] = SUM(CASE WHEN chh2.cha_tarihi >= '20131201' AND chh2.cha_tarihi < '20140101' THEN chh2.cha_meblag ELSE 0 END)
FROM dbo.CARI_HESAP_HAREKETLERI chh2
WHERE chh2.cha_normal_Iade = 1
GROUP BY chh2.cha_kod
) chh2
ON chh2.cha_kod = ch.cari_kod;
これにはサブクエリさえ必要ないかもしれませんが、私が言ったように、完全なクエリがなければ、テーブル構造と実際に必要な結果について推測することしかできません。
1 と答えるには、UDF が同じことを行うサブクエリよりもパフォーマンスが悪いのは普通のことです。件名に関する投稿が多数あります SQL-Server UDF vs subqueryを検索したとき、この回答はグーグルのトップでした