我已经看到了关于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')
我希望有帮助。
您需要将doc_status列添加到SELECT和GROUP BY列表中:
select
first_name,doc_status,
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,doc_status;