繁体   English   中英

MySQL:将多行(具有空值)合并为一行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM