我正在使用SQL Server,我必须分组几列,但前提是设置为真。
DECLARE @setting tinyint
SET @setting = 0
SELECT col1 FROM table1
GROUP BY col1,
CASE WHEN @setting = 1 THEN col2 ELSE NULL END
或者我应该默认为col1,如果设置已设置,我总是用它来分组,所以代码将是
CASE WHEN @test = 1 THEN col2 ELSE col1 END
它实际上可以使用NULL但我在互联网上找不到一个例子来证明它是正确的用法。
答案 0 :(得分:7)
SELECT col1 FROM table1
GROUP BY col1,
CASE WHEN @setting = 1 THEN col2 ELSE NULL END
您的使用是正确的。你已经知道它有效了。
CASE中隐含ELSE NULL
,因此您可以将其写为
GROUP BY col1, CASE WHEN @setting = 1 THEN col2 END
你可以试着对像
这样的变种腼腆 GROUP BY col1, @setting * col2
- 对于数字col2
GROUP BY col1, COALESCE(NULLIF(@setting,1), col2)
但CASE声明实际上展开了一个更好,更简单的计划。
答案 1 :(得分:1)
DECLARE @setting tinyint
SET @setting = 0
SELECT col1 FROM table1
GROUP BY col1,
CASE WHEN @setting = 1 THEN col2 ELSE NULL END
你的第一个例子应该有用
为了进一步说明,您希望在group by col1, col2
时group by col1
或@setting = 1
?
编辑:你的第一个例子是正确的。