[英]MySQL: Combine multiple rows (with null values) into one row?
我有一个名为code_status的表:
Code Message
1 "Start"
2 "In process"
3 "Finish"
另一个表叫做历史
ID Code Name time_date
1 2 Jon 1/2/15
31 1 Abby 2/1/15
12 3 Sara 3/3/15
31 2 Abby 2/3/15
31 3 Abby 2/5/15
8 2 Max 1/22/15
我想使用以下架构创建一个history_view:
history_view (id, name, start_date, process_date, finish_date)
如果未提供日期,则将为NULL
所以看起来像
ID Name start_date process_date finish_date
31 Abby 2/1/15 2/3/15 2/5/15
1 Jon NULL 1/2/15 NULL
... etc
所以我开始做:
CREATE VIEW history_view
AS SELECT h.id, h.name,
(CASE WHEN h.code = 1 THEN time_date) AS start_date,
(CASE when h.code = 2 THEN time_date) AS process_date,
(CASE when h.code = 3 THEN time_date) AS finish_date
FROM history h;
我将得到如下所示的结果:
ID Name start_date process_date finish_date
31 Abby 2/1/15 NULL NULL
31 Abby NULL 2/3/15 NULL
31 Abby NULL NULL 2/5/15
... ETC
有什么办法将行合并在一起吗?
当您说consolidate
您指的是aggregation
,则可以使用聚合函数,例如min
:
CREATE VIEW history_view
AS SELECT h.id, h.name,
min(CASE WHEN h.code = 1 THEN time_date) AS start_date,
min(CASE when h.code = 2 THEN time_date) AS process_date,
min(CASE when h.code = 3 THEN time_date) AS finish_date
FROM history h
group by h.id, h.name;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.