2016-10-09 3 views
1

매 분기별로 판매 데이터에 대해 PARTITION보다 sum()을 선택하여 사용했습니다. 나는 그룹별로 시도했지만 총점을 얻을 수는 없었다.두 공급 업체 결과를 결합하는 방법

저는 구체적으로 두 공급 업체의 성과와 전체 판매량 대비 백분율을보고 싶습니다.

SELECT 

distinct sv.Branch 'Branch', 
dim.ExclusiveGroup_KEY 'Exclusive Tag', 
sum(sv.Revenue) over (PARTITION by sv.branch, dim.ExclusiveGroup_KEY) 'Supplier 1', 
sum(sv.Revenue) over (PARTITION by sv.branch, dim.ExclusiveGroup_KEY) 'Supplier 2', 
sum(sv.Revenue) over (PARTITION by sv.Branch) 'Branch Overall', 
sum(sv.Revenue) over (PARTITION by sv.branch, dim.ExclusiveGroup_KEY)/sum(sv.Revenue) over (PARTITION by sv.Branch) 'Amount %' 
FROM dbo.SalesView as sv 
WHERE sv.Time between ? and ? 

그러나 출력 결과가 별도의 줄에 표시됩니다.

|Branch|Exclusive Tag|Supplier 1|Supplier 2|Branch Overall|Amount %| 
|000001|EXCLSUPPLIER1|700  |700  |25000   |2.8% | 
|000001|EXCLSUPPLIER2|1400  |1400  |25000   |5.6% | 
|000002|EXCLSUPPLIER1|1300  |1300  |60000   |2.2% | 
|000002|EXCLSUPPLIER2|800  |800  |60000   |1.3% | 

나는 결과가 제가 원하는 결과를 표시하는 코드로 변경할 수있는 것을 알려주세요 뭔가이

|Branch|Supplier 1|Supplier 2|Branch Overall|Supp1 %|Supp2 %| 
|000001|700  |1400  |25000   |2.8% |5.6% | 
|000002|1300  |800  |60000   |2.2% |1.3% | 

처럼되고 싶어요. 어떤 도움이나 제안이라도 대단히 감사하겠습니다!

+0

MS SQL Server를 사용하고 있습니까? 그렇다면 어떤 버전입니까? –

답변

0

가장 좋은 해결책은 아니지만 마지막 정보는 아니지만 정보가 충분하지 않습니다. 예를 들어 어둑한 테이블에 어떻게 가입해야하는지 모릅니다. PIVOT을 사용해야한다고 생각합니다. 여기에 몇 가지 더러운 솔루션을 간다 :

SELECT sv.Branch [Branch] 
--,dim.ExclusiveGroup_KEY [Exclusive Tag] 
,(SELECT SUM(svint.Revenue) FROM dbo.SalesView svint WHERE svint.Branch=sv.Branch AND dim.ExclusiveGroup_KEY='EXCLSUPPLIER1') [Supplier 1] 
,(SELECT SUM(svint.Revenue) FROM dbo.SalesView svint WHERE svint.Branch=sv.Branch AND dim.ExclusiveGroup_KEY='EXCLSUPPLIER2') [Supplier 2] 
,SUM(sv.Revenue) [Branch Overall] 
,(SELECT SUM(svint.Revenue) FROM dbo.SalesView svint WHERE svint.Branch=sv.Branch AND dim.ExclusiveGroup_KEY='EXCLSUPPLIER1')/SUM(sv.Revenue) [Supp1] 
,(SELECT SUM(svint.Revenue) FROM dbo.SalesView svint WHERE svint.Branch=sv.Branch AND dim.ExclusiveGroup_KEY='EXCLSUPPLIER2')/SUM(sv.Revenue) [Supp2] 
--sum(sv.Revenue) over (PARTITION by sv.branch, dim.ExclusiveGroup_KEY) 'Supplier 1', 
--sum(sv.Revenue) over (PARTITION by sv.branch, dim.ExclusiveGroup_KEY) 'Supplier 2', 
--sum(sv.Revenue) over (PARTITION by sv.Branch) 'Branch Overall', 
--sum(sv.Revenue) over (PARTITION by sv.branch, dim.ExclusiveGroup_KEY)/sum(sv.Revenue) over (PARTITION by sv.Branch) 'Amount %' 
FROM dbo.SalesView as sv 
WHERE sv.Time between ? and ? 
GROUP BY sv.Branch 
+0

dim_product dim_product dim_product_KEY = sv.Product – Dan

0

사용 group by :

SELECT sv.Branch, 
     sum(case when dim.ExclusiveGroup_KEY = 'EXCLSUPPLIER1' then sv.Revenue else 0 end) as Supplier1, 
     sum(case when dim.ExclusiveGroup_KEY = 'EXCLSUPPLIER2' then sv.Revenue else 0 end) as Supplier2, 
     sum(sv.Revenue) as Branch, 
     sum(case when dim.ExclusiveGroup_KEY = 'EXCLSUPPLIER1' then sv.Revenue else 0 end)/sum(sv.Revenue) as Supplier1_ratio, 
     sum(case when dim.ExclusiveGroup_KEY = 'EXCLSUPPLIER2' then sv.Revenue else 0 end)/sum(sv.Revenue) as Supplier2_ratio 
FROM dbo.SalesView as sv 
WHERE sv.Time between ? and ? 
GROUP BY sv.Branch; 

귀하의 문제가 회전 또는 조건부 집계의 문제이다. 나는 왜 당신이 select distinct과 윈도우 함수를 사용하여 이것을 접근 할 지 확신하지 못한다.

+0

예, 피벗 내 문제가 작동합니다. 그리고 당신의 코드는 제 필요에 따라 완벽하게 작동합니다. 고마워요. 나는 지금 SQL에서 pivoting에 대한 연구를 할 것입니다 :) – Dan