【问题标题】:Using the result of a subquery in a CASE expression with T-SQL在 T-SQL 的 CASE 表达式中使用子查询的结果
【发布时间】:2015-09-10 17:49:06
【问题描述】:

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

下面的虚拟代码描述了我所追求的。这可以做到吗?我正在查询一个 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

【问题讨论】:

  • 我不确定我是否在这里忽略了一些重要的东西,但是如果输出是计数或 0,为什么不直接输出计数,在任何情况下,计数都是 0没有匹配的行...?
  • 你完全正确@MartinParkin。我有点卡在CASE 解决方案中,因为我想输出类似No Action Required 的东西。但是 0 会很好。感谢您保持愚蠢和简单;)
  • 没问题 - 我添加了一个答案,它允许您以您想要的方式使用查询。现在你可以做任何一种方式:)
  • 我已接受您的回答。尽管如此,它现在更容易修复。再次感谢。祝你有美好的一天

标签: tsql sql-server-2005 syntax subquery case


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多