2017-10-28 10 views
0

그래서 그룹화 한 CASE 문이 있습니다. 그러나 각 그룹화 사례 결과의 합계 비율도 계산하려고했습니다. 내가 아래에 만든 명령을 실행하면 '비율이'0 '으로 온다 왜 이해가 안그룹화 된 Case 문을 사용하여 전체의 % 계산하기

Region   Number Percentage 
West Coast  11675 0 
Not West Coast 104620 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

오, 예 ... 저는 실제로 창 기능으로 그 일을 해냈습니다. 분명히 사례 및 그룹을 결합하면 내 상상력의 한계에 도달했습니다. 다시 한 번 감사드립니다! 지나치게 복잡하지만, 1.0을 곱하는 대신 정수로 정수를 나누기 위해 CAST (count (*) AS FLOAT)를 할 수 있습니다. – bbb0777