SQL Server GROUP BY NULL
问题描述:
我正在使用SQL Server,我必须按几列进行分组,但前提是设置为true。SQL Server GROUP BY NULL
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,但我可以在互联网上找到一个例子来证明它是正确的用法。
答
SELECT col1 FROM table1
GROUP BY col1,
CASE WHEN @setting = 1 THEN col2 ELSE NULL END
您的用法是正确的。你已经知道它的工作原理。 ELSE NULL
是隐含在CASE,所以你可以写它作为
GROUP BY col1, CASE WHEN @setting = 1 THEN col2 END
你可以尝试是腼腆与变种像
GROUP BY col1, @setting * col2
- 用于数字COL2GROUP BY col1, COALESCE(NULLIF(@setting,1), col2)
但CASE声明实际上展现了一个更好,更简单的计划。
答
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
?
编辑:你的第一个例子是正确的。
+0
当设置= 1时,我想按col1,col2分组,当设置= 0时,我只想按col1分组。 – user724981 2012-02-13 07:03:45
fwiw,你的第一个代码块对我来说很合适,而且我已经多次使用这个模式。 – 2012-02-13 06:37:27
从逻辑上说,你的group by可以只是'GROUP BY col1,col2',因为如果'@ setting'为'0',那么在col1上比较相等的所有值都可以按任意顺序返回 - 其中一个有效订单将会像'col2'命令一样。 – 2012-02-13 09:35:49