我需要创建一个如下所示的查询:
SELECT attr
来自SomeTable B
在哪里存在
(例如,当B.some_attr = 0时 然后(选择x来自C,其中B.z = z)
当B.some_attr = 1时 那么(选择x从D到哪里B.z = x)
END)
但SQL Server拒绝执行此操作会带来一些语法错误。
如何修改此查询以使其有效?
编辑:我正在添加错误:
Msg 156,Level 15,State 1,Line 4关键字'CASE'附近的语法不正确。
消息156,级别15,状态1,行6关键字'WHEN'附近的语法不正确。
消息102,级别15,状态1,行8''''附近的语法不正确。
答案 0 :(得分:2)
试试这个:
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
答案 1 :(得分: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。
答案 2 :(得分:1)
我认为这也应该有效:
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
)