MySQL:将值作为列表分组到多个字段中

时间:2014-07-16 09:37:26

标签: mysql sql

我在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  |

我无法前进...... 我究竟做错了什么? 请帮忙!

1 个答案:

答案 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;