根据多个列值拆分行
Posted
技术标签:
【中文标题】根据多个列值拆分行【英文标题】: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 ;
这里的任何建议都会很有帮助。
谢谢
【问题讨论】:
【参考方案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【讨论】:
以上是关于根据多个列值拆分行的主要内容,如果未能解决你的问题,请参考以下文章