簡體   English   中英

帶有 LIKE 的 Oracle SQL CASE 為兩種情況返回一個值,當我只想要結果時,如果它們具有任何條件

[英]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.

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