需要在MySql或Access中将多行合并为一行

Posted

技术标签:

【中文标题】需要在MySql或Access中将多行合并为一行【英文标题】:Need to combine multiple rows in MySql or Access with one row 【发布时间】:2012-04-08 22:26:00 【问题描述】:

我有一个包含 sku 编号、attribute_name 和属性值的表。每个 sku 都可以有许多属性。

现在表格看起来像这样。

SKU、ATT_NM、ATT_VAL TOST3580,供应型,碳粉 TOST3580,消费前回收含量百分比 [标称],0 % TOST3580,消费后回收含量百分比 [标称],0 % TOST3580,总回收含量百分比 [标称],0 % TOST3580, OEM/兼容, OEM

我需要他们更像这样。

SKU,ATT_NM,ATT_VAL,ATT_NM1,ATT_VAL1 TOST3580,Supply,Type,Toner,Pre-Consumer Recycled Content Percent,0 %

添加每个属性值。因此,例如上面的示例将具有 5 个不同的属性。每个 SKU 都有 2-20 个属性。任何帮助都是极好的。抱歉格式不好。

这可以在 Access 或 mysql 中完成

【问题讨论】:

1) 我不太明白结果。你丢失了数据。 EG:OEM/Compatible 去哪儿了? 2) 你的意思是你想为每个sku 添加所有att_nm 连接? 您可能应该将 ATT_NM 文本内容移动到另一个表,然后在此表中使用 ATT_ID 链接到它。 是的,对于每个 SKU,我想将所有 ATT_NM 和 ATT_VAL 添加到一行中。 【参考方案1】:

你可以尝试这样的事情(使用 MySQL)-

SELECT
    SKU,
    GROUP_CONCAT(IF(ATT_NM = 'Supply Type', ATT_VAL, NULL)) AS `Supply Type`,
    GROUP_CONCAT(IF(ATT_NM = 'Pre-Consumer Recycled Content Percent [Nom]', ATT_VAL, NULL)) AS `Pre-Consumer Recycled Content Percent [Nom]`,
    ...
FROM table
GROUP BY SKU

您可以使用 -

检索属性列表
SELECT DISTINCT ATT_NM
FROM table

然后使用返回的值构建上一个查询。

【讨论】:

以上是关于需要在MySql或Access中将多行合并为一行的主要内容,如果未能解决你的问题,请参考以下文章

在Oracle中将多行合并为一行? [复制]

mysql中将多行数据合并成一行数据

如何在 Microsoft SQL Server Management Studio 中将多行合并为一行,用逗号分隔

在 MySQL 或 PHP 中连接多行

如何在mysql中将单行插入查询重构为多行插入查询?

如果间隔小于 5 秒,则将多行合并为一行