私はいくつかのクエリを持ち、その出力を結合体と結合します。 しかし、それは私のデータベースサーバー上のCPUを食べている。複数の重複する日付範囲を別個の列として選択する
可能であれば、すべてのユニオンを削除して1つのステートメントにまとめたいとします。ここで
は、クエリは、次のとおりです。
select [shift],p.wc, (sum(QtyMade)/sum(CREWHrs))/(max(t.UNITPERHRS)/NULLIF(max(t.CREW),0)) effy ,'YTD' datefield
from Prod p left join #dtl_temp t on p.PN=t.PARTN
where p.wc in ('999') and [date]>= DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) - 1, 0)
group by p.wc,[shift]
union
select [shift],p.wc, (sum(QtyMade)/sum(CREWHrs))/(max(t.UNITPERHRS)/NULLIF(max(t.CREW),0)) effy ,'Prior Year' datefield
from Prod p left join #dtl_temp t on p.PN=t.PARTN
where p.wc in ('999') and ([date]>= DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) - 1, 0) and [date] < DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0))
group by p.wc,[shift]
union
select [shift],p.wc, (sum(QtyMade)/sum(CREWHrs))/(max(t.UNITPERHRS)/NULLIF(max(t.CREW),0)) effy ,'QTD' datefield
from Prod p left join #dtl_temp t on p.PN=t.PARTN
where p.wc in ('999') and ([date] >= '2017-07-01' and [date] < '2017-07-13')
group by p.wc,[shift]
union
select [shift],p.wc, (sum(QtyMade)/sum(CREWHrs))/(max(t.UNITPERHRS)/NULLIF(max(t.CREW),0)) effy ,'MTD' datefield
from Prod p left join #dtl_temp t on p.PN=t.PARTN
where p.wc in ('999') and ([date] >= '2017-07-01' and [date] < '2017-07-13')
group by p.wc,[shift]
union
select [shift],p.wc, (sum(QtyMade)/sum(CREWHrs))/(max(t.UNITPERHRS)/NULLIF(max(t.CREW),0)) effy ,'WTD' datefield
from Prod p left join #dtl_temp t on p.PN=t.PARTN
where p.wc in ('999') and ([date] >= '2017-07-10' and [date] < '2017-07-13')
group by p.wc,[shift]
union
select [shift],p.wc, (sum(QtyMade)/sum(CREWHrs))/(max(t.UNITPERHRS)/NULLIF(max(t.CREW),0)) effy ,'Prior Quarter' datefield
from Prod p left join #dtl_temp t on p.PN=t.PARTN
where p.wc in ('999') and ([date] >= '2017-04-01' and [date] < '2017-07-01')
group by p.wc,[shift]
というの出力は次のとおりです。
shift wc effy datefield
1 999 0.951558640486598 YTD
2 999 0.706728843730067 YTD
3 999 0.831153497545209 YTD
1 999 0.732836888916855 Prior Year
2 999 0.548579728223933 Prior Year
3 999 0.58957623455441 Prior Year
1 999 0.617329386562882 QTD
2 999 0.826112085298484 QTD
3 999 1.0719875569761 QTD
1 999 0.617329386562882 MTD
2 999 0.826112085298484 MTD
3 999 1.0719875569761 MTD
1 999 0.617329386562882 WTD
2 999 0.832089035926471 WTD
3 999 1.0719875569761 WTD
1 999 1.17254367493512 Prior Quarter
2 999 0.939448907844456 Prior Quarter
3 999 1.20640432761946 Prior Quarter
私は何とかCASE文の中にすべてのそれらの日付範囲を組み合わせるための方法はありますか?または、 "from"と "to"の列を持つ日付カテゴリ(WTD、MTD、QTDなど)を持つ一時テーブルを作成する必要がありますか?
私は、組合なしでこの結果をどのように達成できるのか正確にはわかりません。
SELECTで表示される日付は、それらを計算してSQLクエリを作成するスクリプトから得られます。
なぜこれを同時に実行する必要がありますか?最適化のために、 'datefiled'の別の名前に基づいて調べる必要がある多くの側面があります。クエリの各部分の結果が一意であると思います。代わりに' union all'を使用することができます。 – LONG
あなたと他の誰かが示唆したように、それをすべて組合に渡します。 私はクエリを試して、実行時間は似ていました。しかし、組合はすべて安価であるので、私はそれを使用します。 これらの出力がチャートにプッシュされます。私は別の要求としてサーバーに各選択を送信し、負荷が緩和されるかどうかを確認することができますね。 – bobby