2013-09-30 11 views
14

Ho la seguente tabella in SQL Server:Creare intervalli elementari di distanza dalla tabella di SQL Server per gli istogrammi

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

Che cosa devo fare è eseguire una query che raggrupperà i record in determinate gamme e contare le occorrenze . I risultati devono essere visualizzati successivamente in una tabella dell'istogramma (grafico a barre). Ho provato una query simile alla seguente:

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 

Per il momento, questo fa il trucco, ma non considera la colonna di genere. Il risultato sarà una sola riga che conta la frequenza di ogni fascia di età:

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

Se genere sarebbe considerata non ci dovrebbero essere due record indicati, per ogni genere. Ho bisogno di vedere qualcosa del tipo:

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

Come devo affrontare questo problema?

+0

ho dimostrato di codice SQL per generare un istogramma direttamente qui: http://stackoverflow.com/questions/16268441/generate-histogram-in-sql-server –

risposta

25

Basta aggiungere la colonna Gender al numero SELECT e quindi fare un 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

Credo che si deve utilizzare la somma() funzione invece della funzione count(). Altrimenti, ciascun intervallo sarà uguale al numero totale di record nella tabella Partecipanti. (btw - Ho fatto lo stesso errore più volte.) –

+0

@ToddMeinershagen Immagino che il suo tavolo abbia un partecipante unico per riga come mostra il suo esempio, nel qual caso 'COUNT' e' SUM' funzionerebbero allo stesso modo da 'SUM 'non ottiene un valore diverso da 1 per ogni riga – AS91

Problemi correlati