SQL:GROUP BY多个列,带有CASE语句

时间:2015-08-10 10:27:30

标签: sql sql-server tsql

我是SQL的新手。

如果GROUP BY为真,我希望CASE使用@myboolean语句,以特定方式对结果进行分组。

我已经看到很多关于如何将GROUP BYCASE BY与单个字段一起使用的示例,或者如何在没有GROUP BY的情况下将CASE用于多个字段声明。

我不知道如何将两者结合起来。当我在GROUP BY语句中包含CASE字段时,出现语法错误:

  

','

附近的语法不正确

所以,这有效:

GROUP BY 
/* This works with no enclosing CASE statement */
field1,
field2,
field3,
field4

这会产生语法错误:

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

我已经看过这些问题了:

我使用的是Microsoft SQL Server Management Studio。

请注意,我继承了一个非常复杂/冗长的SQL语句,我希望避免更改。我不想将查询拆分为两个单独的SELECT语句。

2 个答案:

答案 0 :(得分: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

如果@myboolean不是1而评估为NULL而不会影响结果。

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

答案 1 :(得分:1)

您可以尝试这种方式:

IF (@myboolean=1)
BEGIN
SELECT
field1,
field2,
field3,
field4
FROM myTable
GROUP BY
field1,
field2,
field3,
field4

END
ELSE
BEGIN
SELECT
field1
FROM myTable
GROUP BY
field1
END