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 фактически разворачивается к лучшему, более простому плану.