[英]Amend Query To Check For Multiple Values Within A Group Based On Specific Column
我有來自外部系統的下表(數據是匿名的):
我使用以下查詢按列cola
、 colb
和colc
的組合對結果進行colc
; case 語句將工作日列中的 x 值替換為amount
列中的相應值。 這很好用。
SELECT
cola,
colb,
colc,
max(case when Mon = 'x' THEN amount END) as Mon,
max(case when Tue = 'x' THEN amount END) as Tue,
max(case when Wed = 'x' THEN amount END) as Wed,
max(case when Thu = 'x' THEN amount END) as Thu,
max(case when Fri = 'x' THEN amount END) as Fri,
max(case when Sat = 'x' THEN amount END) as Sat,
max(case when Sun = 'x' THEN amount END) as Sun
FROM tbltestquote
GROUP BY
cola,
colb,
colc
結果是:
我現在添加了一個名為threshold
的新列。 可以看到,按cola
、 colb
和colc
分組時,可以有多個threshold
,如下圖:
我更新的 SQL 查詢將這個新列考慮在內是這樣的:
SELECT
cola,
colb,
colc,
threshold,
max(case when Mon = 'x' THEN amount END) as Mon,
max(case when Tue = 'x' THEN amount END) as Tue,
max(case when Wed = 'x' THEN amount END) as Wed,
max(case when Thu = 'x' THEN amount END) as Thu,
max(case when Fri = 'x' THEN amount END) as Fri,
max(case when Sat = 'x' THEN amount END) as Sat,
max(case when Sun = 'x' THEN amount END) as Sun
FROM tbltestquote
GROUP BY
cola,
colb,
colc,
threshold
這將返回以下帶有兩個新行的結果集,這是正確的:
我現在想添加一個新的布爾列,該列指示在按cola
、 colb
和colc
分組時是否有多個閾值,根據下面的模型結果集:
請注意,對於cola
、 colb
和colc
組具有第二個閾值的所有行, hasMultipleThreshold
列都為 TRUE,而不僅僅是一個不同的行。
如果確實可能,我不確定如何修改我對此列的查詢。 任何指導表示贊賞。
你可以試試下面——
SELECT
cola,
colb,
colc,
threshold,
max(case when Mon = 'x' THEN amount END) as Mon,
max(case when Tue = 'x' THEN amount END) as Tue,
max(case when Wed = 'x' THEN amount END) as Wed,
max(case when Thu = 'x' THEN amount END) as Thu,
max(case when Fri = 'x' THEN amount END) as Fri,
max(case when Sat = 'x' THEN amount END) as Sat,
max(case when Sun = 'x' THEN amount END) as Sun,
case when count(*) over(partition by cola,colb,colc order by cola)>1 then 1 else 0 end as hasMultipleThreshold
FROM tbltestquote a
GROUP BY
cola,
colb,
colc,
threshold
你可以試試這個
SELECT
cola,
colb,
colc,
threshold,
max(case when Mon = 'x' THEN amount END) as Mon,
max(case when Tue = 'x' THEN amount END) as Tue,
max(case when Wed = 'x' THEN amount END) as Wed,
max(case when Thu = 'x' THEN amount END) as Thu,
max(case when Fri = 'x' THEN amount END) as Fri,
max(case when Sat = 'x' THEN amount END) as Sat,
max(case when Sun = 'x' THEN amount END) as Sun,
( select case
when count(threshold)>0
then cast(1 as bit)
else
cast(0 as bit)
end
from tbltestquote as ts where ts.cola=t.cola and ts.colb=t.colb and ts.colc= t.colc
group by ts.cola, ts.colb, ts.colc, ts.threshold ) as hasMultipleThreshold
FROM tbltestquote as t
GROUP BY
cola,
colb,
colc,
threshold
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.