首页 > 解决方案 > 将多行数据组合到每个 id 一行

问题描述

我有一个每个类别有多个日期的原始数据,我使用代码case when category = 'referral' then min(date) end as date_referral来获取每个 id 的每个类别的最早日期。

但是,它不会连续返回数据,而是为每个类别创建行,如下所示:

id    date_entered      date_referral      date_reply        date_final
-------------------------------------------------------------------------
1      2020-12-20           null              null              null 
1      2020-12-20         2020-12-21          null              null 
1      2020-12-20           null            2020-12-21          null 
1      2020-12-20           null              null            2020-12-24

distinct我尝试通过使用或group by(单独和一起)强制执行单行:

select distinct id
, date_entered
, case when category = 'referral' then min(date) end as date_referral
, case when category = 'reply' then min(date) end as date_reply 
, case when category = 'final' then min(date) end as date_final

from data
group by id
, date_entered
, category

但它将继续返回多行,每行计算每个类别的最早日期。我还尝试在此代码之后创建 cte,select distinct id, date_entered, date_referral, date_reply, date_final from table但仍然返回多行..

如何组合这些行并使其返回单行?

标签: sqlgroup-bynetezza

解决方案


你不应该分组category
像这样使用条件聚合:

select id, date_entered,
       min(case when category = 'referral' then date end) as date_referral,
       min(case when category = 'reply' then date end) as date_reply, 
       min(case when category = 'final' then date end) as date_final
from data
group by id, date_entered

推荐阅读