如何将两列数据合并为一列?SQL实现多列合并与分组聚合
问题说明
需要将farmtable表中的Botanical Name列数据合并到Item列中,同时保留Location列的分组聚合拼接功能。现有代码已实现Location的分组拼接,但不清楚如何实现多列合并。
原始数据表(farmtable)
| Id | Item | Botanical Name | Location |
|---|---|---|---|
| 1 | Apple | Malus spp | Block C |
| 2 | Coffee | Coffea | Block A |
| 3 | Coffee | Coffea | Block B |
| 4 | Apple | Malus spp | Block B |
现有代码
SELECT Item, Botanical, STUFF( (SELECT DISTINCT ', ' + Location FROM farmtable WHERE Item = a.Item FOR XML PATH ('')) , 1, 1, '') AS URLList FROM farmtable AS a GROUP BY Item, Botanical
期望结果
| Id | Item | Location |
|---|---|---|
| 1 | Apple, Malus spp | Block C, Block B |
| 2 | Coffee, Coffea | Block A, Block B |
修改后的实现代码
SELECT -- 合并Item与Botanical Name列 CONCAT(Item, ', ', [Botanical Name]) AS Item, -- 聚合拼接Location字段 STUFF( (SELECT DISTINCT ', ' + Location FROM farmtable WHERE Item = a.Item AND [Botanical Name] = a.[Botanical Name] FOR XML PATH ('')), 1, 2, '') AS Location FROM farmtable AS a GROUP BY Item, [Botanical Name]
关键修改点
- 用
CONCAT(Item, ', ', [Botanical Name])直接拼接两列,生成新的Item列 - 子查询的
WHERE条件补充[Botanical Name] = a.[Botanical Name],确保关联逻辑严谨(避免同一Item对应不同Botanical Name时出现错误聚合) - 调整
STUFF第三个参数为2,因为拼接后的Location前缀是,(两个字符),需要去掉开头的多余符号
内容的提问来源于stack exchange,提问作者Ken John
相关产品推荐
相关产品推荐

