我会尽量尽量说出来,所以请耐心等待。我正在从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,依此类推。
我无法在搜索中找到任何内容。有没有最好的方法来实现这个?
答案 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
就是这样。