如何在SQL Server上的CASE WHEN中选择多个列?

Jos*_*hua 24 sql-server select case-when

我已广泛搜索此网站但无法找到解决方案.

以下是我的查询示例:

SELECT 
   ActivityID,

   Hours = (CASE 
                WHEN ActivityTypeID <> 2 THEN
                     FieldName = (Some Aggregate Sub Query),
                     FieldName2 = (Some other aggregate sub query)
                WHEN ActivityTypeID = 2 THEN
                     FieldName = (Some Aggregate Sub Query with diff result),
                     FieldName2 = (Some Other Aggregate Sub Query with diff result)
           END)
Run Code Online (Sandbox Code Playgroud)

显然我遗漏了很多查询,我只想看看是否可能.

我知道我可能只做两次"CASE",但我想我会问......

Jos*_*son 28

问题是该CASE声明不会以您尝试使用它的方式工作.您只能使用它来切换查询中一个字段的值.如果我理解你要做什么,你可能需要这个:

SELECT 
   ActivityID,
   FieldName = CASE 
                  WHEN ActivityTypeID <> 2 THEN
                      (Some Aggregate Sub Query)
                  ELSE
                     (Some Aggregate Sub Query with diff result)
               END,
   FieldName2 = CASE
                  WHEN ActivityTypeID <> 2 THEN
                      (Some Aggregate Sub Query)
                  ELSE
                     (Some Aggregate Sub Query with diff result)
               END
Run Code Online (Sandbox Code Playgroud)


Pet*_*ney 13

不,CASE是一个函数,只能返回一个值.我想你将不得不复制你的CASE逻辑.

另一种选择是用IF包装整个查询,并有两个单独的查询来返回结果.没有看到查询的其余部分,很难说这是否适合您.