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

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?

以上是关于如何根据数据透视值源字段声明新字段值的主要内容,如果未能解决你的问题,请参考以下文章

Rails中给数据表添加字段,为啥没添加上

SqlServer中的数据根据该表中某字段的值的结果决定是不是显示

根据雪花中的字段值获取每个日期和数据透视表的最后一个值

Excle数据透视如何创建多条件汇总的数据透视表

jqGrid如何做字段在表全部数据中唯一性函数校验

在数据表中添加一个字段的SQL语句怎么写