簡體   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