Sql-Server

A = 1 else 0 如果 B 在 ms sql server(azure data studio) 中滿足兩個條件

  • July 8, 2022

我正在嘗試根據另一列的值來區分列。我試圖使用 CASE 函式,但無法得到我想要的。

健康)狀況

  1. 如果 ColB 只有 1 則線上
  2. 如果 ColB 只有 2 則離線
  3. 如果 ColB 同時具有 1 和 2,則兩者都有
  4. 如果 ColB 沒有 1 或 2 則沒有

結果應該是這樣的

謝謝!

看起來你只需要條件COUNT

SELECT
 t.ColA,
 CASE WHEN COUNT(CASE WHEN t.ColB = '1' THEN 1 END) > 0 THEN
   CASE WHEN COUNT(CASE WHEN t.ColB = '2' THEN 1 END) > 0 THEN
     'both'
   ELSE
     'online'
   END
 ELSE
   CASE WHEN COUNT(CASE WHEN t.ColB = '2' THEN 1 END) > 0 THEN
     'offline'
   ELSE
     'none'
   END
 END
FROM YourTable t
GROUP BY
 t.ColA;

這只是給同一隻貓剝皮的另一種方法,使用條件COUNT(DISTINCT)和條件MAX()

SELECT
 ColA
, distinguish =
   CASE COUNT(DISTINCT CASE WHEN ColB IN ('1', '2') THEN ColB END)
     WHEN 0 THEN 'none'
     WHEN 2 THEN 'both'
     ELSE
       CASE MAX(CASE WHEN ColB IN ('1', '2') THEN ColB END)
         WHEN '1' THEN 'online'
         ELSE 'offline'
       END
   END
FROM
 dbo.YourTable
GROUP BY
 ColA
;

引用自:https://dba.stackexchange.com/questions/314165