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但我无法在互联网上找到一个例子来证明它是正确的用法.
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声明实际上展开了一个更好,更简单的计划.