如何根据数据透视值源字段声明新字段值
Posted
技术标签:
【中文标题】如何根据数据透视值源字段声明新字段值【英文标题】:How to declare new field values based on pivot value source field 【发布时间】:2015-11-24 16:09:53 【问题描述】:我会尽量用最好的语言来表达,所以请多多包涵。我正在从 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
根据上面的查询,我需要在结果中再创建 2 个字段:YEAR 和 PERIOD。如果 seat_qty_um 的值来自数组中的第一个字段 field_2011_qtr_4_seat_qty_um,我需要在 YEAR 字段中填充 2011 并在 PERIOD 中填充 4。
如果 seat_qty_um 的值来自数组中的第二个字段 field_2012_qtr_1_seat_qty_um,我需要在 YEAR 字段中填充 2012,在 PERIOD 中填充 1,依此类推。
我无法在搜索中找到任何内容。有没有最好的方法来实现这个?
【问题讨论】:
【参考方案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
就是这样。
【讨论】:
我想过这一点,但仅仅使用 case 语句并不能保证使用与 seat_qty_um 字段相关的正确值。 好吧,也许我对你的问题理解得不够透彻。您对“座位数量的正确值”有何理解?是这样的:例如“field_2012_qtr_3_seat_qty_um”有一个数字,那么seat_qty_um = field_2012_qtr_3_seat_qty_um?以上是关于如何根据数据透视值源字段声明新字段值的主要内容,如果未能解决你的问题,请参考以下文章