私は以下の質問があります。約20の条件があるので、私はそれをほとんど取り除きました。それは長すぎると複雑です。私のクエリが機能し、取得するデータは私が望む通りです今年の数字と私の以前の(ly)数字。これは前年のいくつかのサブクエリで実現され、現在の会計年度の1を引きます。今、私のクエリがより複雑になり、私が持っているデータの量のために、これらのサブクエリのうち15個以上を追加すると、実行に12時間以上かかる場合があります。このクエリを書くための効率的な方法がありますか?クエリをより効率的にするにはどうすればよいですか?
EDIT完全に有効な質問に、なぜこれほど多くのdownvotes
わかりません。
SELECT
period,
finyear,
fin_week,
region,
store,
salesperson,
SUM(Fin_Revenue) as total_rev_ty,
SUM(CASE WHEN status_rev IN ('refund') THEN Fin_Revenue ELSE 0 END) as refund_rev_ty,
SUM(CASE WHEN status_rev IN ('credit') Fin_Revenue ELSE 0 END) as credit_rev_ty,
(
SELECT SUM(Fin_Revenue)
FROM [MYDB] r2
where r1.store = r2.store
AND r1.fin_week = r2.fin_week
AND r1.Salesperson = r2.Salesperson
AND r1.fin_yr = dateadd(yy,1,r2.fin_yr)
) as total_rev_ly,
(
SELECT SUM(CASE WHEN status_rev IN ('refund') THEN Fin_Revenue ELSE 0 END)
FROM [MYDB] r2
where r1.store = r2.store
AND r1.fin_week = r2.fin_week
AND r1.Salesperson = r2.Salesperson
AND r1.fin_yr = dateadd(yy,1,r2.fin_yr)
) as refund_rev_ly,
(SELECT
SUM(CASE WHEN status_rev IN ('credit') Fin_Revenue ELSE 0 END)
FROM [MYDB] r2
where r1.store = r2.store
AND r1.fin_week = r2.fin_week
AND r1.Salesperson = r2.Salesperson
AND r1.fin_yr = dateadd(yy,1,r2.fin_yr)
) as refund_rev_ly
FROM [MYDB] r1
WHERE
fin_yr IN ('2016')
実際には 'FROM'節を含めて実行することを実際に促すかもしれないと私は思います。 –
@ GordonLinoffしかし、それは今のところ非常に効率的です!非常に迅速にエラーメッセージを返し、テーブルをスキャンしません。 –
私はwiggyの人々がこの種のものを乗り越える方法が大好きです。 FROM文がそこにあります。建設的な助けは、看護師のコメントよりもよいかもしれません。ありがとうございました。 – 80gm2