2017-12-02 2 views
0

열을 행으로 조 변경하려고합니다. 공급 업체 당 하나의 행에 연간 총 마진이 있습니다.Netezza 행과 중복 행을 표시하는 열

이 주어진 테이블은 다음과 같습니다 expected.jpg

는하지만 여러 행에서 반복 공급 업체를 얻을 :
given.jpg

SELECT 
SupplierName, 
CASE WHEN YearID = 2018 THEN Shipping_cost ELSE NULL END SC_2018, 
CASE WHEN YearID = 2017 THEN Shipping_cost ELSE NULL END SC_2017, 
CASE WHEN YearID = 2016 THEN Shipping_cost ELSE NULL END SC_2016, 

CASE WHEN YearID = 2018 THEN Retail_Percent_2018 ELSE NULL END Retail_2018, 
CASE WHEN YearID = 2017 THEN Retail_Percent_2017 ELSE NULL END Retail_2017, 
CASE WHEN YearID = 2016 THEN Retail_Percent_2016 ELSE NULL END Retail_2016 

    FROM 
    (
     SELECT 
     SUPL.SUP_NAM AS SupplierName, 
     SUPL.SUPL_CST AS Shipping_cost, 

     (SELECT SUM(Shipping_Cost) FROM MM_TRX_TABLE S 
     WHERE YearID = '2018') AS GRANDTOTAL_2018, 

     (SELECT SUM(Shipping_Cost) FROM MM_TRX_TABLE S 
     WHERE YearID = '2017') AS GRANDTOTAL_2017, 

     (SELECT SUM(Shipping_Cost) FROM MM_TRX_TABLE S 
     WHERE YearID = '2016') AS GRANDTOTAL_2016, 

     SUM(SUPL.Retail_Cost) AS Retail_Total, 

     CASE WHEN YearID = 2018 
     THEN (Retail_Total/GRANDTOTAL_2018) * 100 
     ELSE NULL END AS Retail_Percent_2018,   

     CASE WHEN YearID = 2017 
     THEN (Retail_Total/GRANDTOTAL_2017) * 100 
     ELSE NULL END AS Retail_Percent_2017,   

     CASE WHEN YearID = 2016 
     THEN (Retail_Total/GRANDTOTAL_2016) * 100 
     ELSE NULL END AS Retail_Percent_2016,  

    FROM MM_TRX_TABLE S 
     WHERE YEARID IN ('2018', '2017', '2016') 

     GROUP BY 
     SupplierName, 
     YEARID, 
     )DTL 
    ORDER BY GrossMargin DESC 

내가처럼 보이도록 테이블을 기대하고있다. enter image description here

+0

이 쿼리를 사용하여 얻은 결과를 추가 할 수 있습니까? –

+0

내 결과 Andrew 업데이트. 미리 감사드립니다. – Jasmine

답변

0

나는 그것을 줄 것이다.

우선 : 내 취향에 너무 많이 합류했습니다. 조인 횟수가 적 으면 일반적으로 옵티 마이저의 결정이 줄어들어 코드가 더 강력 해집니다. 또한 일반적으로 첫 번째 장소에서 실적이 더 좋습니다.

당신은 당신이 소매를 해결하기가 매우 간단 연간 백분율로 표현하고자하는 사실을 무시하는 경우 : 당신이 비율을 원하는 경우,

Select 
SupplierName, 
Sum(CASE WHEN YearID = 2018 THEN Supl_cst ELSE NULL END) SC_2018, 
Sum(CASE WHEN YearID = 2017 THEN Supl_cst ELSE NULL END) SC_2017, 
Sum(CASE WHEN YearID = 2016 THEN Supl_cst ELSE NULL END) SC_2016, 

Sum(CASE WHEN YearID = 2018 THEN Retail_cst ELSE NULL END) Retail_2018, 
Sum(CASE WHEN YearID = 2017 THEN Retail_cst ELSE NULL END) Retail_2017, 
Sum(CASE WHEN YearID = 2016 THEN Retail_cst ELSE NULL END) Retail_2016 
FROM MM_TRX_TABLE S 
    WHERE YEARID IN (2018,2017,2016) 
GROUP BY SupplierName 

를 바로 첫 번째 결과에 다시 합계에 가입을 그리고 합계 내의 부분을 수행하십시오 :

Select 
SupplierName, 
Sum(CASE WHEN YearID = 2018 THEN Supl_cst ELSE NULL END) SC_2018, 
Sum(CASE WHEN YearID = 2017 THEN Supl_cst ELSE NULL END) SC_2017, 
Sum(CASE WHEN YearID = 2016 THEN Supl_cst ELSE NULL END) SC_2016, 

Sum(CASE WHEN YearID = 2018 THEN Retail_cst/Retail_total ELSE NULL END) Retail_2018, 
Sum(CASE WHEN YearID = 2017 THEN Retail_cst/Retail_total ELSE NULL END) Retail_2017, 
Sum(CASE WHEN YearID = 2016 THEN Retail_cst/Retail_total ELSE NULL END) Retail_2016 
FROM MM_TRX_TABLE S 
Join (select 
     YearID, 
     sum(Retail_cst) Retail_total 
     Group by YearID 
    ) T 
Using (YearID) 
    WHERE S.YEARID IN (2018,2017,2016) 
GROUP BY SupplierName