2013-09-30 9 views
14

에 대한 SQL Server 테이블에서 범위 쓰레기통을 만들어이 SQL Server의 다음 표 :히스토그램

----------------------------- 
ID  Age   Gender 
1   30   F 
2   35   M 
3   32   M 
4   18   F 
5   21   F 

내가해야 할 것은 그룹 주어진 범위의 레코드하는 쿼리를 실행하고 발행 수를 계산하는 것입니다 . 결과는 히스토그램 차트 (막 대형 차트)에 나중에 표시해야합니다. 나는 다음과 비슷한 질의를 시도했다 :

SELECT 
count(CASE WHEN Age>= 10 AND Age < 20 THEN 1 END) AS '10 - 20', 
count(CASE WHEN Age>= 21 AND Age < 30 THEN 1 END) AS '21 - 30', 
count(CASE WHEN Age>= 31 AND Age < 35 THEN 1 END) AS '31 - 35', 
count(CASE WHEN Age>= 36 AND Age < 40 THEN 1 END) AS '36 - 40', 
FROM (SELECT Age FROM Attendees) AS AgeGroups 

잠깐 동안이 성기 칼럼을 고려하지 않는다. 그것은 모든 연령 그룹의 주파수를 계산 한 행을 발생합니다 :

10-20  21-30  31-35  36-40 
    0   22  21  13 

성이 고려 될 경우 각 성별 표시된 두 개의 기록이 있어야한다. 다음과 같이보고 싶습니다.

Gender 10-20  21-30  31-35  36-40 
    M   0   12  9   6 
    F   0   10  12  7 

이 문제는 어떻게 해결해야합니까?

+0

내가 직접 여기 히스토그램을 생성하는 SQL 코드를 보여 : http://stackoverflow.com/questions/16268441/generate-histogram-in-sql-server –

답변

25

열을 SELECT에 추가 한 다음 GROUP BY을 입력하기 만하면됩니다.

SELECT 
Gender, 
count(CASE WHEN Age>= 10 AND Age < 20 THEN 1 END) AS [10 - 20], 
count(CASE WHEN Age>= 21 AND Age < 30 THEN 1 END) AS [21 - 30], 
count(CASE WHEN Age>= 31 AND Age < 35 THEN 1 END) AS [31 - 35], 
count(CASE WHEN Age>= 36 AND Age < 40 THEN 1 END) AS [36 - 40] 
FROM Attendees AS AgeGroups 
GROUP BY Gender 
+0

난 당신이) (합계를 사용할 필요가 있다고 생각 함수 대신에 count() 함수를 사용합니다. 그렇지 않으면 각 범위는 [참석자] 테이블에있는 총 레코드 수와 같습니다. (btw - 나는이 같은 실수를 여러 번했다.) –

+0

@ToddMeinershagen 필자의 테이블은 자신의 샘플이 보여주는 것처럼 행마다 고유 한 참석자가 있다고 추측하고있다.이 경우 'SUM'과 'COUNT'는 'SUM '는 각 행에 대해 1 이외의 값을 가져 오지 않습니다 – AS91