SQL Server GROUP по NULL - PullRequest
       4

SQL Server GROUP по NULL

1 голос
/ 13 февраля 2012

Я использую 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

ИЛИ я должен по умолчанию использовать col1, который я всегда использую для группировки, если настройка установлена, поэтому код будет

CASE WHEN @test = 1 THEN col2 ELSE col1 END

Это действительно работает, чтобы использовать NULL, но я не могу найти пример в Интернете, чтобы доказать, что это правильное использование.

Ответы [ 2 ]

7 голосов
/ 13 февраля 2012
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 - для числового col2 GROUP BY col1, COALESCE(NULLIF(@setting,1), col2)

Но оператор CASE фактически разворачивается к лучшему, более простому плану.

1 голос
/ 13 февраля 2012
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?

edit: ваш первый пример верный.

...