[英]Oracle SQL CASE with a LIKE returning a value for both scenarios when I only want a result if they have any of the criteria
我有一個非常簡單的場景,我就是無法上班。
我有一些示例數據:
我的表
IDNO IDCode
1 AAA
1 BBB
1 CCC
2 BBB
2 CCC
3 AAA
當前代碼
SELECT DISTINCT IDNO,
CASE WHEN IDCode IN ('BBB', 'CCC') THEN 1 ELSE 0 END yesno
FROM MyTable
電流輸出
IDNO yesno
1 0
1 1
2 1
3 0
我想要的是在滿足任何條件時返回 1,即使它們包含不在 CASE 條件中但至少包含其中 1 個的值。
預期產出
IDNO yesno
1 1
2 1
3 0
在下面嘗試使用 group by 和 max 聚合
SELECT IDNO,
max(CASE WHEN IDCode IN ('BBB', 'CCC') THEN 1 ELSE 0 END) yesno
FROM MyTable
group by IDNO
如果您每行都有一個唯一的idno
表,那么您可以執行以下操作:
select i.idno,
(case when exists (select 1 from t where t.idno = i.idnot and t.idcode in ('BBB', 'CCC' then 1 else 0 end)
then 1 else 0
end) as flag
from ids i;
雖然條件聚合是一個很好的解決方案,但我提到這一點是因為:
idno
根本沒有idcode
,這包括它們。Exists
通常比聚合表現更好。idno
級別將許多屬性組合在一起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.