2012-02-13 6 views
1

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 기본합니다, 그래서 코드가 실제로 NULL을 사용하여 작동합니까

CASE WHEN @test = 1 THEN col2 ELSE col1 END 

될 것이지만, 내가 할 수있는 올바른 사용법임을 입증하기 위해 인터넷에서 예제를 찾지 못했습니다.

+2

fwiw, 첫 번째 코드 블록이 내게 적합 해 보이며이 패턴을 여러 번 사용했습니다. –

+0

논리적으로 group by는 'GROUP BY col1, col2' 일 수 있습니다. 왜냐하면'@setting'이'0'이면'col1'에서 비교할 수있는 모든 값은 어떤 순서로든 반환 될 수 있습니다. 명령은'col2'에 의해 명령 된 것과 같습니다. –

답변

7
SELECT col1 FROM table1 
GROUP BY col1, 
    CASE WHEN @setting = 1 THEN col2 ELSE NULL END 

사용법은 정확합니다. 이미 효과가 있다는 것을 알고 있습니다.
ELSE NULL는 경우 암시, 그래서 당신은 당신은 숫자 COL2 --for

GROUP BY col1, @setting * col2같은 변종 수줍어 일을 시도 할 수

GROUP BY col1, CASE WHEN @setting = 1 THEN col2 END

로 작성한 수
GROUP BY col1, COALESCE(NULLIF(@setting,1), col2)

그러나 CASE 문은 실제로 더 나은 간단한 계획으로 풀립니다.

1
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