2016-04-06 14 views
0

SQL Server'da EventDate ile birlikte basit bir tablo var ve Katıldığım yerde Katıldığım yer (Katıldım, İptal Edildi, Katılmadı, Diğer, Bilinmiyor). Bilinmeyenlerin RATE'sini döndüren bir sorguya ihtiyacım var. Diğer değerlerin oranlarını umursamıyorum.Belirli bir alan değerinin (SQL Server) oranını hesaplanıyor

Katılan değerin 'Bilinmeyen' olduğu yere ait kayıt sayısını döndürmek için nerede kullanabileceğimi biliyorum, ancak sonuçta bir sorguda toplamın yüzdesine ulaşmam gerekiyor.

Bu sorgu, Bilinmeyenlerin toplamını alır, ancak SADECE Bilinmeyenlerin yüzdesini almak için buradan nereye giderim?

SELECT Count(Attended) As TotalCount 
FROM [MyTable] 
WHERE (Attended = 'Unknown') 
AND Month(EventDate) = 1 
AND Year(EventDate) = 2016 
GROUP BY Attended 

ipucu: değeri bilinmediği durumlarda 11300 toplam satır ve 2212 vardır. Ben .195 döndüren bir sorgu istiyorum (ki 2212/11300 = 19.5%)

cevap

1

kullanın koşullu Böyle bir CASE ifadesiyle bir "şartlı sayısı" yapabileceği

SELECT COUNT(CASE WHEN Attended = 'Unknown' THEN 1 END) * 100.0 
     /
     COUNT(*) As UnknowRate 
FROM [MyTable] 
WHERE Month(EventDate) = 1 
    AND Year(EventDate) = 2016 
0

COUNT():

Eğer toplam tüm satırları (sadece "Bilinmeyen" olanları) değerlendiriyorlar beri, bir group by

yapmak zorunda kalmamasıdır
select 
    count(*) as TotalCount, 
    sum(case when Attended = 'Unknown' then 1 else 0 end) as AttendedUnknownCount, 
    cast(sum(case when Attended = 'Unknown' then 1 else 0 end) as float) 
    /cast(count(*) as float) as PctAttendedUnknown 
from MyTable 
Where Month(EventDate) = 1 and Year(EventDate) = 2016 

Not