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