簡體   English   中英

修改查詢以根據特定列檢查組內的多個值

[英]Amend Query To Check For Multiple Values Within A Group Based On Specific Column

我有來自外部系統的下表(數據是匿名的):

在此處輸入圖片說明

我使用以下查詢按列colacolbcolc的組合對結果進行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的新列。 可以看到,按colacolbcolc分組時,可以有多個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

這將返回以下帶有兩個新行的結果集,這是正確的:

在此處輸入圖片說明

我現在想添加一個新的布爾列,該列指示在按colacolbcolc分組時是否有多個閾值,根據下面的模型結果集:

在此處輸入圖片說明

請注意,對於colacolbcolc組具有第二個閾值的所有行, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM