2017-03-02 65 views
0

移調行成列這裏是我目前的PostgreSQL的查詢:PostgreSQL中

SELECT  
     c.ce_new_cat_short, 
     d.ver_desc_txt, 
     c.product_type, 
     round(sum(d.profit_amt/f.exch_rate)::numeric, 2) AS dp_dol, 
     sum(d.unit_qty) AS units 
FROM  
     ext_ce.gsam_v_data_detail as d 
     LEFT JOIN 
      (SELECT DISTINCT g.prmry_prfl_cd, g.wrkhrs_grp, g.brnd_fmly_desc_txt_adj FROM ext_ce.gsam_v_data_context AS g) AS vc 
     ON vc.prmry_prfl_cd = d.prmry_prfl_cd, 
     ext_ce.gsam_data_context as c, 
     ext_ce.info_fx_rates_v2 as f 
WHERE  
     c.product_type <> 'SALES AIDS'::text 
     AND c.cncpt_nr::numeric = d.prmry_prfl_cd 
     AND f.offr_cmpgn_yr_nr = 2017 
     AND d.mrkt_desc_txt = f.mrkt_desc_txt 
GROUP BY 
     c.ce_new_cat_short, 
     d.ver_desc_txt, 
     c.product_type; 

我堅持努力轉column ver_desc_txt

這是我目前的產出,並且是理想的產出。

Current and desired output

如何調整這個查詢來獲取所需要的輸出?

+0

的可能的複製[Postgres的 - 移調行分列(http://stackoverflow.com/questions/23060256/postgres-轉置行到列) –

回答

0

您可以使用FILTER子句限制聚合函數:

SELECT  
     c.ce_new_cat_short, 
     c.product_type, 
     round(sum(CASE WHEN d.ver_desc_txt = 'FINAL LEADER LIST' THEN d.profit_amt/f.exch_rate ELSE 0 END)::numeric, 2) AS dp_dol_FLL, 
     round(sum(CASE WHEN d.ver_desc_txt = 'BEST OFFICAL PROJECTION' THEN d.profit_amt/f.exch_rate ELSE 0 END)::numeric, 2) AS dp_dol_BOP, 
     sum(CASE WHEN d.ver_desc_txt = 'FINAL LEADER LIST' THEN d.unit_qty ELSE 0 END) AS units_FLL, 
     sum(CASE WHEN d.ver_desc_txt = 'BEST OFFICAL PROJECTION' THEN d.unit_qty ELSE 0 END) AS units_BOP 
FROM  
     ext_ce.gsam_v_data_detail as d 
     JOIN ext_ce.gsam_data_context as c 
      ON (c.cncpt_nr::numeric = d.prmry_prfl_cd) 
     JOIN ext_ce.info_fx_rates_v2 as f 
      ON (d.mrkt_desc_txt = f.mrkt_desc_txt) 
     LEFT JOIN (SELECT DISTINCT g.prmry_prfl_cd, g.wrkhrs_grp, g.brnd_fmly_desc_txt_adj FROM ext_ce.gsam_v_data_context AS g) AS vc 
      ON vc.prmry_prfl_cd = d.prmry_prfl_cd 
WHERE  
     c.product_type <> 'SALES AIDS'::text 
     AND f.offr_cmpgn_yr_nr = 2017 
GROUP BY 
     1, 2 

此外,我會建議你使用JOIN加盟的形式 - 它允許放心,加入的一部分被正確連接。

UPD:

對於8.2.15版本必須使用情況下,而不是FILTER

+0

謝謝羅馬。我得到了:在「d」處或附近的語法錯誤。第4行 – Bartek

+0

對不起,因爲沒有結構和樣本表我不能測試表。我刪除一個','並添加一個。請立即嘗試 –

+0

不應該是:FILTER(其中d.ver_desc_txt ='最終領導者列表')AS dp_dol_FLL,? – Bartek