2013-09-30 20 views
14

için SQL Server tablosundan aralık bidonları oluşturma Ben SQL Server Aşağıdaki tabloda:histogramlarına

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

Ne yapmak gerek grup verilen aralıklarda kayıtları olacak bir sorgu yürütmek ve tekrarlarını saymak etmektir . Sonuçlar daha sonra bir histogram grafiğinde gösterilmelidir (çubuk grafik). Bu hile yok, Şu an için

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 

ancak cinsiyet sütun dikkate almaz: Ne aşağıdakine benzer bir sorgu çalıştı. Her yaş grubunun frekansı sayar tek bir satır neden olur:

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

cinsiyet olarak düşünülebilir ise her cinsiyet için gösterilen iki kayıtları, olmalıdır. Görmek istediğim şeyler:

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

Bu soruna nasıl yaklaşmalıyım?

+0

doğrudan burada bir histogram oluşturmak için SQL kodunu gösterdi: http://stackoverflow.com/questions/16268441/generate-histogram-in-sql-server –

cevap

25

Gender sütununu SELECT ürününüze ekleyin ve GROUP BY'u yapın.

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

Sana) (toplamını kullanmak zorunda olduğuna inanıyoruz count() işlevi yerine işlev. Aksi takdirde, her aralık Katılımcılar tablosundaki toplam kayıt sayısına eşittir. (btw - Aynı hatayı birden çok kez yaptım.) –

+0

@ToddMeinershagen Onun tablosunun örnekleminin gösterdiği gibi sıra başına benzersiz bir katılımcı olduğunu tahmin ediyorum, bu durumda "COUNT" ve "SUM", "SUM" olduğundan aynı şekilde çalışır 'her satır için 1'den başka bir değer almaz – AS91