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

Using the result of a subquery in a CASE expression with T-SQL

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

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

SELECT   'Hello Whosebug'
        ,'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 Whosebug'
        ,'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

只需使用子查询作为您选择的来源:

SELECT   'Hello Whosebug'
        ,'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

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