我是SQL的新手。
如果GROUP BY
为真,我希望CASE
使用@myboolean
语句,以特定方式对结果进行分组。
我已经看到很多关于如何将GROUP BY
和CASE 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
我已经看过这些问题了:
SQL: Group By with Case Statement for multiple fields:似乎是GROUP BY
,或者基于CASE
,而不是基于多个。无论如何都没有逗号。
Group by Multiple columns and case statement:也许我很厚,但我无法看到这包括GROUP BY
条款中的案例陈述
其他各种不太相关的
我使用的是Microsoft SQL Server Management Studio。
请注意,我继承了一个非常复杂/冗长的SQL语句,我希望避免更改。我不想将查询拆分为两个单独的SELECT
语句。
答案 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