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