SQL Server GROUP BY NULL

时间:2012-02-13 06:30:00

标签: sql sql-server group-by

我正在使用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但我在互联网上找不到一个例子来证明它是正确的用法。

2 个答案:

答案 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, col2group by col1@setting = 1

编辑:你的第一个例子是正确的。