使用T-SQL在CASE表达式中使用子查询的结果

Ben*_*Ben 2 t-sql syntax sql-server-2005 case subquery

我正在编写带有一些CASE表达式的查询,它输出帮助数据列,这些列可以帮助我确定是否需要执行特定操作。我想知道是否可以以某种方式将子查询的结果用作输出,而不必两次执行相同的查询(介于之间WHEN (subquery) THEN和之后的结果THEN

下面的虚拟代码描述了我的追求。能做到吗?我正在查询MS2005 SQL数据库。

SELECT   'Hello StackOverflow'
        ,'Thanks for reading this question'
        ,CASE
            WHEN 
                (
                    SELECT count(*)
                    FROM    sometable
                    WHERE   condition = 1
                    AND     somethingelse = 'value'
                ) > 0 THEN
                    -- run the query again to get the number of rows
                    (
                        SELECT count(*)
                        FROM    sometable
                        WHERE   condition = 1
                        AND     somethingelse = 'value'
                    )
            ELSE 0
         END

SELECT   'Hello StackOverflow'
        ,'Thanks for reading this question'
        ,CASE
            WHEN 
                (
                    SELECT count(*)
                    FROM    sometable
                    WHERE   condition = 1
                    AND     somethingelse = 'value'
                ) AS subqry_count > 0 THEN
                    -- use the subqry_count, which fails... "Incorrect syntax near the keyword 'AS'"
                    subqry_count
            ELSE 0
         END
Run Code Online (Sandbox Code Playgroud)

Mar*_*tin 5

只需将子查询用作您从中选择的源:

SELECT   'Hello StackOverflow'
        ,'Thanks for reading this question'
        ,CASE subqry_count.Cnt
          WHEN 0 THEN 0
          ELSE subqry_count.Cnt
        END
  FROM ( SELECT count(*) AS Cnt
                    FROM    sometable
                    WHERE   condition = 1
                    AND     somethingelse = 'value'
                )  subqry_count
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果您的输出COUNT是0,则只返回0,那么您甚至不需要使用CASE语句。