【问题标题】:Transpose columns in postgresql - lateral join?转置postgresql中的列 - 横向连接?
【发布时间】:2021-02-21 15:55:05
【问题描述】:

我正在尝试在 postgresql 中转置几列。

从此数据格式:

交易编号 |交易名称 |创建日期 | Lead_date_pipeline_ | warm_lead_date_pipeline_ | d.meeting_1_date_pipeline_ | d.final_meeting_date_pipeline_ | d.contract_sent_date_pipeline_ | d.closed_won_date_pipeline_ 等。

我想转置除交易名称和交易 ID 之外的所有列并获得 2 个新列(包含所有阶段的管道阶段:领导、热领导、会议 1、最终会议等;以及日期),如下所示:

交易编号 |交易名称 |管道阶段|数据

我可以使用以下代码做到这一点:

SELECT d."deal id", d."deal name", v.*
FROM   gg_deals d
     , LATERAL (
   VALUES
      ('create date', d."create date")
    , ('lead_date_pipeline_', d.lead_date_pipeline_)
    , ('warm_lead_date_pipeline_', d.warm_lead_date_pipeline_)
    , ('meeting_1_date_pipeline_', d.meeting_1_date_pipeline_)
    , ('final_meeting_date_pipeline_', d.final_meeting_date_pipeline_)
    , ('contract_sent_date_pipeline_', d.contract_sent_date_pipeline_)
    , ('closed_won_date_pipeline_', d.closed_won_date_pipeline_)
    , ('closed_lost_date_pipeline_', d.closed_lost_date_pipeline_)
   ) v (Pipeline_stage, Date)

但是,当我们将数据移至 redshift 时,此查询不再有效并出现此错误

SQL Error [500310] [42883]: [Amazon](500310) Invalid operation: function values("unknown", timestamp without time zone) does not exist;

我怎样才能解决这个问题?我不明白问题出在哪里

【问题讨论】:

    标签: sql postgresql amazon-redshift unpivot lateral-join


    【解决方案1】:

    一个典型的解决方法是使用union all

    select deal_id, deal_name, 'create date' as pipeline_stage "create date" as date from gg_deals
    union all select deal_id, deal_name, 'lead_date_pipeline_', d.lead_date_pipeline_ from gg_deals
    union all select deal_id, deal_name, 'warm_lead_date_pipeline_', d.warm_lead_date_pipeline_ from gg_deals
    union all select deal_id, deal_name, 'meeting_1_date_pipeline_', d.meeting_1_date_pipeline_ from gg_deals
    ...
    

    【讨论】:

      猜你喜欢
      • 2020-05-16
      • 2020-08-09
      • 2020-11-30
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2019-02-05
      相关资源
      最近更新 更多