我在MySQL数据库中面临以下问题:给定连接表,其中具有不同类型的值连接到值。类型的数量是固定的。像这样:
ID|Type|Value|
---------------
1 | A | Z |
1 | A | X |
1 | B | Y |
2 | A | Z |
2 | A | X |
我必须在没有循环的情况下产生以下结果:
ID|Type A|Type B|
-----------------
1 | Z,X | Y |
2 | Z,X | NULL |
有可能吗? 我所做的是使用GROUP_CONCAT命令进行SQL选择,但它产生了不同的东西:
select ID, TYPE, group_concat(VALUE) groups from MYTABLE group by ID, TYPE;
它产生了
ID|TYPE|groups|
-----------------
1 | A | Z,X |
1 | B | Y |
2 | A | Z,X |
我无法前进...... 我究竟做错了什么? 请帮忙!
答案 0 :(得分:1)
以这种方式使用GROUP_CONCAT
会将列VALUE
中的所有值仅提供给一列,但您要为每个TYPE
值查找两列。
使用CASE
内的GROUP_CONCAT
表达式,以便为每种类型添加一列,如下所示:
SELECT
ID,
GROUP_CONCAT(CASE WHEN TYPE = 'A' THEN VALUE END) AS 'Type A',
GROUP_CONCAT(CASE WHEN TYPE = 'B' THEN VALUE END) AS 'Type B'
FROM yourtable
GROUP BY ID;