我有一个MySQL数据库。我有一个表,其中包含不同开发人员建议的程序列表和估计时间。
如下:
proc_name user_id est_time
-------------------------------
'A' 1 20
'A' 3 15
'B' 2 16
'B' 4 18
'C' 1 20
现在我需要这样的输出
A|1_20|2_0 |3_15|4_0
B|1_20|2_16|3_0 |4_18
C|1_20|2_0 |3_0 |4_0
如果用户没有为proc_name
发布任何小时数,则会打印“0”。
任何帮助将不胜感激。
答案 0 :(得分:0)
这不是“group_concat”。这是一个旋转的例子。
select proc_name,
concat('1_', max(case when user_id = 1 then est_time else 0 end)),
concat('2_', max(case when user_id = 2 then est_time else 0 end)),
concat('3_', max(case when user_id = 3 then est_time else 0 end)),
concat('4_', max(case when user_id = 4 then est_time else 0 end))
from t
group by proc_name
我觉得很奇怪,你将所有用户1放在第一列和中,同时将“1”放在列值中。
实际上,如果您真的希望将数据作为单个字符串,那么您可以将上述结果连接在一起,而不是将它们放在单独的列中:
select concat_ws('|', proc_name,
concat('1_', max(case when user_id = 1 then est_time else 0 end)),
concat('2_', max(case when user_id = 2 then est_time else 0 end)),
concat('3_', max(case when user_id = 3 then est_time else 0 end)),
concat('4_', max(case when user_id = 4 then est_time else 0 end))
)
from t
group by proc_name