sql - 将多行数据组合到每个 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
但仍然返回多行..
如何组合这些行并使其返回单行?
解决方案
你不应该分组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
推荐阅读
- excel - 导入网页数据
- selenium - @AfterTest 注解更改为 @Test 时测试失败
- mysql - 如何通过命令 service mysql start 启动 mysql
- angular - 角度事件绑定我可以在 HTML 中创建自己的属性并将其发送到类文件吗
- laravel - Laravel artisan:每秒听一次命令
- java - 如何正确部署 Bean - JNDI、Weblogic 12C
- java - java桌面应用程序使用jdbc连接到数据库时出现问题
- c# - 与以前的值相比,如何放大或夸大变量值的微小变化?
- reactjs - React 上下文:如何传递函数?
- salesforce - 高级 Apex 专家 - 请确保已创建 Select One 标签