1

我需要创建一个如下所示的查询:


从 SomeTable B
WHERE EXISTS中选择 attr
    (当 B.some_attr = 0
        THEN(从 C WHERE Bz = z 选择 x)
     时 B.some_attr = 1
        THEN(从 D WHERE Bz = x)选择 x)
     END)

但是 SQL Server 拒绝执行这会带来一些语法错误。
如何修改此查询以使其正常工作?

编辑:我正在添加错误:

消息 156,级别 15,状态 1,第 4 行关键字“CASE”附近的语法不正确。
消息 156,级别 15,状态 1,第 6 行 关键字“WHEN”附近的语法不正确。
消息 102,级别 15,状态 1,第 8 行 ')' 附近的语法不正确。

4

3 回答 3

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
于 2012-07-20T14:07:15.020 回答
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。

于 2012-07-20T14:04:48.407 回答
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
)
于 2012-07-20T14:08:24.803 回答