2017-10-28 161 views
0

所以我有一個CASE語句,我已經分組了。但是,我還試圖計算每個分組CASE結果的總數百分比。當我運行下面進行的命令,它給使用分組病例語句計算總數的百分比

Region   Number Percentage 
West Coast  11675 0 
Not West Coast 104620 0 

我不明白爲什麼「比例」來作爲「0」。

下面是代碼,標有'問題行'。

With [Summed Region] AS 
(

SELECT 
    [State Province], 

    CASE [State Province] 
    WHEN 'Oregon' THEN 'West Coast' 
    WHEN 'Washington' THEN 'West Coast' 
    WHEN 'California' THEN 'West Coast' 
    ELSE 'Not West Coast' 
    END AS 'Region' 

FROM 
    [WideWorldImportersDW].[Dimension].[City] 
) 

SELECT 
    Region, 
    count(Region) AS Number, 
    ---THE PROBLEM LINE IS BELOW THIS--- 
    count(region)/(select count(*) FROM [WideWorldImportersDW].[Dimension]. 
    [City]) AS Percentage 


FROM 
    [Summed Region] 

GROUP BY 
    Region 

那條線的問題是什麼?如果我將這兩部分分開,每一部分都會返回正確的數字。但是當我將另一個分開時,我會得到'0'。

謝謝!

回答

0

它被稱爲整數除法。所以加小數點地方:

SELECT Region, count(Region) AS Number, 
     count(region) * 1.0/(select count(*) FROM [WideWorldImportersDW].[Dimension].[City]) AS Percentage 
FROM [Summed Region] 
GROUP BY Region; 

你不需要的子查詢要麼,所以使用窗函數:

SELECT Region, count(*) AS Number, 
     count(*) * 1.0/sum(count(*)) over() AS Percentage 
FROM [Summed Region] 
GROUP BY Region; 
+0

嗯,這很容易,謝謝!在12分鐘內,我會回答這個問題...... – bbb0777

+0

哦,是的......我想我已經用窗口函數實現了這一點,只是顯然將CASE&GROUP結合起來達到了我想象的極限。再次感謝!對於遇到這種情況的其他人 - 過於複雜,但也可以使用CAST(count(*)AS FLOAT)來通過整數事物來遍歷整個除法整數,而不是乘以1.0 – bbb0777