2017-10-28 16 views
0

したがって、グループ化したCASE文があります。しかし、私はまた、グループ化された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 

その行の問題は何ですか? 2つの部分を分割すると、それぞれ正しい番号が返されます。しかし、私が1つを他のものに分けると、私は「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を組み合わせることは私の想像力の限界に達しました。再度、感謝します!あまりにも複雑ですが、1.0を乗算するのではなく、整数で分割する整数全体を乗り越えるために 'CAST(count(*)AS FLOAT) 'を実行することもできます – bbb0777

関連する問題