2012-07-20 69 views
1

我需要创建一个查询,看起来像这样:CASE语句内部存在

SELECT attr
FROM SomeTable B
WHERE EXISTS
    (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)

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

编辑:我加入了错误:

Msg 156, Level 15, State 1, Line 4 Incorrect syntax near the keyword 'CASE'.
Msg 156, Level 15, State 1, Line 6 Incorrect syntax near the keyword 'WHEN'.
Msg 102, Level 15, State 1, Line 8 Incorrect syntax near ')'.

+4

“有些语法错误”将是一个很大的帮助大家谁愿意帮助你。 – DaveRlz 2012-07-20 14:00:45

回答

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

试试这个:

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。

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 
)