0

我有一个 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

如果用户没有为 a 发布任何时间proc_name,将打印“0”。

任何帮助将不胜感激。

4

1 回答 1

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
于 2013-05-21T10:42:00.733 回答