SQL:GROUP BY多个带CASE语句的列

Lyd*_*lph 7 sql t-sql sql-server

我是SQL的新手.

我想使用GROUP BY一个CASE声明,如果@myboolean是真的,以特定的方式对结果进行分组.

我已经看过很多关于如何使用GROUP BYCASE BY使用单个字段的示例,或者如何在GROUP BY没有CASE语句的情况下使用多个字段.

我不知道如何将两者结合起来.当我GROUP BYCASE语句中包含字段时,我收到语法错误:

','附近的语法不正确

所以,这有效:

GROUP BY 
/* This works with no enclosing CASE statement */
field1,
field2,
field3,
field4
Run Code Online (Sandbox Code Playgroud)

这会产生语法错误:

GROUP BY 
CASE WHEN (@myboolean=1)
  THEN
    field1,   <-- ERROR HERE:  Incorrect syntax near ','
    field2,
    field3,
    field4
  ELSE 
    field1
  END
Run Code Online (Sandbox Code Playgroud)

我已经看过这些问题:

我正在使用Microsoft SQL Server Management Studio.

请注意,我正在继承一个非常复杂/长的SQL语句,我想避免过多地改变它.我不想将查询拆分为两个单独的SELECT语句.

Tim*_*ter 8

你可以用......

GROUP BY field1,
    CASE WHEN @myboolean=1 THEN field2 END,
    CASE WHEN @myboolean=1 THEN field3 END,
    CASE WHEN @myboolean=1 THEN field4 END
Run Code Online (Sandbox Code Playgroud)

如果@myboolean不是1,那么评估NULL结果不会影响结果.

如果它在存储过程中,您也可以使用IF.