2013-09-30 13 views
14

Mam poniższej tabeli w SQL Server:Tworzenie koszy wahają się od SQL tabeli serwera dla histogramy

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

Co muszę zrobić, to wykonać kwerendę, która będzie grupa rekordy w podanych zakresach i policzyć wystąpień . Wyniki muszą być wyświetlone później na wykresie histogramu (wykres słupkowy). Wypróbowałem zapytanie podobne do następującego:

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 

Na razie robi to sztuczkę, ale nie uwzględnia kolumny płci. Spowoduje to jeden wiersz, który zlicza częstość każdej grupy wiekowej:

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

Jeśli płci byłoby uznane powinny istnieć dwa rekordy wyświetlane, dla każdej płci. Muszę zobaczyć coś takiego:

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

Jak powinienem podejść do tego problemu?

+0

I wykazały kodu SQL do generowania histogramu bezpośrednio tutaj: http://stackoverflow.com/questions/16268441/generate-histogram-in-sql-server –

Odpowiedz

25

Po prostu dodaj kolumnę Gender do swojej SELECT, a następnie wykonaj 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

Uważam, że trzeba użyć sumy() funkcja zamiast funkcji count(). W przeciwnym razie każdy zakres będzie równy całkowitej liczbie rekordów w tabeli uczestników. (btw - popełniłem ten sam błąd wiele razy.) –

+0

@ToddMeinershagen Zgaduję, że jego stół ma unikalnego uczestnika w wierszu, jak pokazuje jego przykład, w którym to przypadku 'COUNT' i' SUM' będą działać tak samo od 'SUM 'nie otrzymuje wartości innej niż 1 dla każdego wiersza – AS91

Powiązane problemy