2013-09-30 59 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

只需將Gender列添加到您的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()函數。否則,每個範圍將等於參與者表中的記錄總數。 (順便說一句 - 我多次犯了同樣的錯誤。) –

+0

@ToddMeinershagen我猜他的表每行都有一個獨特的與會者,他的示例顯示,在這種情況下'COUNT'和'SUM'將起作用,因爲SUM '每行不會得到1以外的值 – AS91