[英]MySQL: one column/multiple rows group_concat into multiple columns filled with values from another column
我已經看到許多關於 group_concat 一列/多行到多列的答案,但我找不到如何用第二列的數據填充新列。
我的數據表如下所示:
first_name doc_number doc_status
a 1 new
a 2 new
b 3 pending
b 4 approved
c 5 new
c 6 approved
c 7 approved
這是我想要的結果:
first_name doc_status_new doc_status_pending doc_status_approved
a 1,2
b 3 4
c 5 6,7
這是我得到的結果:
first_name doc_status_new doc_status_pending doc_status_approved
a 1,2
b 3,4
c 5,6,7
第 2 行不應在同一列中包含“3,4”。 第 3 行也不應該在同一列中包含“5,6,7”。 我不知道如何讓 group_concat 只列出與“where”語句相關的 doc_number。
這是我使用的代碼:
select
first_name,
case when doc_status = 'new' then group_concat(doc_number) end as doc_status_new,
case when doc_status = 'pending' then group_concat(doc_number) end as doc_status_pending,
case when doc_status = 'approved' then group_concat(doc_number) end as doc_status_approved
from table_name
group by first_name;
你可能需要——
select first_name,
group_concat(case when doc_status = 'new' then doc_number end) as doc_status_new,
group_concat(case when doc_status = 'pending' then doc_number end) as doc_status_pending,
group_concat(case when doc_status = 'approved' then doc_number end) as doc_status_approved
from table_name
group by first_name;
我認為更好的解決方案是使用 UNION,它非常快,並且使用 LIKE:
(SELECT group_concat(doc_number) AS doc_status_new WHERE doc_status LIKE 'new')
UNION
(SELECT group_concat(doc_number) AS doc_status_pending WHERE doc_status LIKE 'pending')
UNION
(SELECT group_concat(doc_number) AS doc_status_approved WHERE doc_status LIKE 'approved')
我希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.