2016-04-15 6 views
2

Ich habe eine Tabelle mit Tausenden von Datensätzen und Beispiel wird unten angegeben.Anzahl der Personen mit Altersbereich zur Anzeige in Balkendiagramm

Es gibt nur [DateOfBirth] Feld in der Tabelle, und ich brauche Altersbereich mit Gesamtzahl zu berechnen:

ID   Name    DateOfBirth 
1   John    1980-11-20 00:00:00.000 
2   Denial   1940-04-10 00:00:00.000 
3   Binney   1995-12-25 00:00:00.000 
4   Sara    1960-11-20 00:00:00.000 
5   Poma    1980-11-20 00:00:00.000 
6   Cameroon   1980-11-20 00:00:00.000 
..... 
..... 

ich die SQL Query Ausgabe 10 Jahre Alten schreiben muß Bereich angezeigt wird es in der Bar passen Diagramm.

und so weiter, wenn das Alter Person in der Tabelle vorhanden ist.

Antwort

2

Bitte versuchen Sie die unten Abfrage

select 
    cast(1 + DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10 *10 as varchar)+ '-'+ cast(10+ DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10 *10 as varchar) as AgeRange 
    , 
    count(1) as count 
    from tbl 
    group by 
    DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10 

Demo link here

Update: basierend auf dem benutzerdefinierten Bereich, sollten Sie diese Abfrage verwenden

select 
cast(case when 
DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10 =0 
then 0 
else 
1 end+ DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10 *10 as varchar)+ '-'+ cast(10+ DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10 *10 as varchar) as AgeRange 
, 
count(1) as count 
from tbl 
group by 
DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10 
+0

ist zeigt das Ergebnis wie folgt: Altersspanne Count -825--824 399-400 594-595 947-948 1290-1291 1678-16 79 2384-2385 2673-2674 Ich brauche stattdessen 10 Jahre Datumsspanne. Vielen Dank, schnelle Antwort. – Simant

+0

@DPBhatt Ich habe meine Antwort aktualisiert. Wenn Sie es nützlich fanden, akzeptieren Sie es und/oder upvote es, so dass zukünftige Suchende ähnlicher Probleme diese Frage nützlich finden. [https://StackOverflow.com/Help/Someone-answers] – DhruvJoshi

+0

@DPBhatt Ich sehe, dass Ihre Bereiche falsch sind, Sie begannen mit '0-10' und dann' 11-20' ... brauchen Sie genau das oder '0-9',' 10-19' oder '1-10',' 11-20' – DhruvJoshi

0

dies scheint zu funktionieren ich

SELECT count(*) as [count] 
     , cast(datediff(YYYY, value, getdate())/10 * 10 as varchar(10)) + ' - ' + 
     cast(datediff(YYYY, value, getdate())/10 * 10 + 9 as varchar(10)) as range 
    FROM [docSVdate] 
    group by datediff(YYYY, value, getdate())/10 
    order by datediff(YYYY, value, getdate())/10 desc 

dieser Start mit 0, dann kommt noch hinzu, 9
Sie konsequent sein müssen als 0 bis 10 ein Bereich von 11
ist, wenn Sie auf 1 beginnen müssen dann denke ich, müssen Sie auch die Gruppe ändern, indem

Verwandte Themen