如何基于数据透视值源字段声明新字段值

时间:2015-11-24 16:09:53

标签: arrays postgresql pivot greenplum

我会尽量尽量说出来,所以请耐心等待。我正在从Greenplum PostgreSQL中的15个字段中取消数据。这些字段可能包含也可能不包含我要在新字段中删除的数字。如果该字段确实包含数字,我需要确定该值来自哪个字段,以便我可以根据数据来自哪个字段来填充其他字段。

以下是我的查询以获得更好的解释:

SELECT geo_zone, customer___global,  field3, customer_type,     
business_segment, product_business_line , product_brand, product_family,   
license_type, license_status_sap, field11,

unnest(array[ 
field_2011_qtr_4_seat_qty_um ,
field_2012_qtr_1_seat_qty_um ,
field_2012_qtr_2_seat_qty_um ,
field_2012_qtr_3_seat_qty_um ,
field_2012_qtr_4_seat_qty_um ,
field_2013_qtr_1_seat_qty_um ,
field_2013_qtr_2_seat_qty_um ,
field_2013_qtr_3_seat_qty_um ,
field_2013_qtr_4_seat_qty_um ,
field_2014_qtr_1_seat_qty_um ,
field_2014_qtr_2_seat_qty_um ,
field_2014_qtr_3_seat_qty_um ,
field_2014_qtr_4_seat_qty_um ,
field_2015_qtr_1_seat_qty_um ,
field_2015_qtr_2_seat_qty_um ,
field_2015_qtr_3_seat_qty_um ]) as seat_qty_um

FROM table

从上面的查询中我需要在结果中创建另外两个字段:YEAR和PERIOD。如果seat_qty_um的值来自数组中的第一个字段field_2011_qtr_4_seat_qty_um,我需要填充2011的YEAR字段和填充4的PERIOD。

如果seat_qty_um的值来自数组中的第二个字段field_2012_qtr_1_seat_qty_um,我需要填充2012年的YEAR字段和填充1的PERIOD,依此类推。

我无法在搜索中找到任何内容。有没有最好的方法来实现这个?

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,我会建议使用“case when”。 像这样:

SELECT geo_zone, customer___global,  field3, customer_type,     
business_segment, product_business_line , product_brand, product_family,   
license_type, license_status_sap, field11,

case when field_2011_qtr_4_seat_qty_um is not null then 2011
    when field_2012_qtr_1_seat_qty_um is not null then 2012
    when field_2012_qtr_2_seat_qty_um is not null then 2012
    when field_2012_qtr_3_seat_qty_um is not null then 2012
    end as YEAR,

case when field_2011_qtr_4_seat_qty_um is not null then 4
    when field_2012_qtr_1_seat_qty_um is not null then 1
    when field_2012_qtr_2_seat_qty_um is not null then 2
    when field_2012_qtr_3_seat_qty_um is not null then 3
    end as PERIOD,

FROM table

就是这样。