簡體   English   中英

EXISTS中的CASE語句

[英]CASE statement inside EXISTS

我需要創建一個如下所示的查詢:

SELECT attr
從SomeTable B
在哪里存在
(例如,當B.some_attr = 0時
那么(選擇x來自C,其中Bz = z)
當B.some_attr = 1時
那么(選擇x來自D,其中Bz = x)
結束)

但SQL Server拒絕執行此操作會帶來一些語法錯誤。
如何修改此查詢以使其有效?

編輯:我添加錯誤:

消息156,級別15,狀態1,行4關鍵字'CASE'附近的語法不正確。
消息156,級別15,狀態1,行6關鍵字'WHEN'附近的語法不正確。
消息102,級別15,狀態1,行8'''附近的語法不正確。

嘗試這個:

SELECT A 
FROM B 
WHERE 
     CASE 
     WHEN B.some_attr = 0 AND EXISTS(SELECT x FROM C WHERE B.z = z) THEN 1
     WHEN B.some_attr = 1 AND EXISTS(SELECT x FROM D WHERE B.z = x) THEN 1
     END = 1

嘗試這個:

SELECT A
FROM B
WHERE 
    (CASE WHEN B.some_attr = 0
          THEN (SELECT x FROM C WHERE B.z = z)
          WHEN B.some_attr = 1
          THEN (SELECT x FROM D WHERE B.z = x)
     END) is not null

這假定子查詢返回一行。 如果沒有,只需輸入max(x)而不是x。

我認為這也應該有效:

SELECT attr 
FROM SomeTable B 
WHERE EXISTS (
    SELECT 1 FROM C WHERE B.some_attr = 0 AND B.z = z UNION ALL
    SELECT 1 FROM D WHERE B.some_attr = 1 AND B.z = x
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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