在带有 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
语句。
我正在编写一个包含一些 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
语句。