【问题标题】:Split a row based on multiple column values根据多个列值拆分行
【发布时间】:2020-04-15 22:22:34
【问题描述】:

我在 postgres 中有下表(下面仅显示 2 行)。

trial_id    lead_sponsor    lead_sponsor_class  collaborators   collaborators_class 
NCT00004336 NCRR    NIH University of Michigan  Other
NCT00004337 NCRR    NIH null    null

我想根据lead_sponsor 和collaborators 列拆分每一行,并根据它们创建新列

预期输出是:

trial_id    sponsor_company           sponsor_role        agency
NCT00004336 NCRR                      lead_sponsor        NCRR
NCT00004336 University of Michigan    collaborators       University of Michigan
NCT00004337 NCRR                      lead_sponsor        NCRR

我尝试了几件事,但我无法找出解决方案(我是 postgres 的新手)

SELECT
    *,
    CASE WHEN lead_sponsor is not null THEN lead_sponsor
         WHEN collaborators is not null THEN collaborators
         ELSE ''
    END AS sponsor_company
FROM
    tb ;

这里的任何建议都会很有帮助。

谢谢

【问题讨论】:

    标签: sql postgresql unpivot


    【解决方案1】:

    您可以使用横向连接进行反透视:

    select x.*
    from mytable t
    cross join lateral (values 
        (trial_id, lead_sponsor,  'lead_sponsor', lead_sponsor),
        (trial_id, collaborators, 'collaborators', collaborators)
    ) x(trial_id, sponsor_company, sponsor_role, agency)
    where x.sponsor_company is not null
    

    Demo on DB Fiddle

    试用ID |赞助商公司 |赞助商角色 |机构 :------------ | :---------------- | :------------ | :--------- NCT00004336 | NCRR |铅赞助商| NCRR NCT00004336 |大学 |合作者 |大学 NCT00004337 | NCRR |铅赞助商| NCRR

    【讨论】:

      猜你喜欢
      • 2020-02-10
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 2016-04-10
      • 2023-04-01
      相关资源
      最近更新 更多