MYSQL - 如何将值分成列 - concat

Posted

技术标签:

【中文标题】MYSQL - 如何将值分成列 - concat【英文标题】:MYSQL - How to seperate values into columns - concat 【发布时间】:2014-11-25 02:05:10 【问题描述】:

目前我在 phpmyadmin 中输入了以下 mysql 代码:

select Product_ID, group_concat(`Name` separator ',') as `Spec` 
from 
( 
select Product_ID, concat(`Name`, ':', 
group_concat(`Value` separator ',')) as `Name` 
from product_spec_list  
group by Product_ID, `Name` 
) tbl 
group by Product_ID 

产生:

ID              Name
3   Shielded:0,Type:General Purpose
4   Shielded:0,Type:General Purpose

等等。带有一长串产品 ID,其名称和值由 : 和 , 分隔。

如何将值分成以“名称”命名的列?

例如

ID Shielded      Type 
3     0     General Purpose 
4     0     General Purpose 

大约有 40 种不同的值名称。

感谢您的帮助

【问题讨论】:

谷歌:“mysql pivot”或“mysql dynamic pivot”。如果您不知道列的名称,则需要动态透视。 【参考方案1】:

我还没有测试过,但我在想这样的事情:

SELECT Product_ID AS `ID`
  , GROUP_CONCAT(IF(Name="Shielded", values, "") SEPARATOR "") AS `Shielded`
  , GROUP_CONCAT(IF(Name="Type", values, "") SEPARATOR "") AS `Type`
FROM
  (SELECT Product_ID, Name, GROUP_CONCAT(value SEPARATOR ',') AS values
   FROM product_spec_list
   GROUP BY Product_ID, Name
  ) AS subQ
GROUP BY Product_ID;

【讨论】:

以上是关于MYSQL - 如何将值分成列 - concat的主要内容,如果未能解决你的问题,请参考以下文章

将值放在升序数据库列之间

关于mysql数据库将一列分成两列的方法

如果值不存在,将值插入 MySQL 表?

将mysql中的列分成多列

MySQL - 将两列分成两个不同的行

无法将值 NULL 插入列 - 如何强制标识增加? [关闭]