SQL Server GROUP BY NULL

use*_*981 1 sql sql-server group-by

我正在使用SQL Server,我必须按几列分组,但前提是设置为true.

DECLARE @setting tinyint
SET @setting = 0

SELECT col1 FROM table1 
GROUP BY col1,
  CASE WHEN @setting = 1 THEN col2 ELSE NULL END
Run Code Online (Sandbox Code Playgroud)

或者我应该默认为col1,如果设置已设置,我总是用它来分组,所以代码就是

CASE WHEN @test = 1 THEN col2 ELSE col1 END
Run Code Online (Sandbox Code Playgroud)

它实际上使用NULL但我无法在互联网上找到一个例子来证明它是正确的用法.

Ric*_*iwi 7

SELECT col1 FROM table1 
GROUP BY col1,
  CASE WHEN @setting = 1 THEN col2 ELSE NULL END
Run Code Online (Sandbox Code Playgroud)

你的用法是正确的.你已经知道它有效.
ELSE NULL在CASE中暗示,所以你可以把它写成

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声明实际上展开了一个更好,更简单的计划.