SQL server联表查询问题

img


SQL server联表查询之后主表一条数据可能对应多条明细,如图我想要把”最牛的商品“那三条数据变成一条,前面fullname不同的三条数据值拼接起来(pcs,件,瓶)。就是多条数据合并,特点字段值拼接处理能否实现?
补充一下,多条数据不一定是三条,可能四条五条,有多少条就要拼接多少个字段,然后还有其他字段也要显示,分组之后,其他字段如何显示?

该回答引用chatGpt
可以使用 SQL 的 GROUP BY 和 STRING_AGG 函数实现。

例如:

SELECT 主表字段1, 主表字段2, STRING_AGG(明细表字段, ',') WITHIN GROUP (ORDER BY 明细表字段)
FROM 主表
LEFT JOIN 明细表
ON 主表.主表字段 = 明细表.主表字段
GROUP BY 主表字段1, 主表字段2

STRING_AGG 函数可以将分组后的数据拼接起来,WITHIN GROUP (ORDER BY 明细表字段) 可以指定拼接的顺序。

参考GPT和自己的思路:

可以使用 SQL Server 中的 GROUP BY 和字符串聚合函数来实现将多条数据合并为一条并拼接特定字段的值。以下是示例代码:

SELECT t1.[fullname], 
       STRING_AGG(t2.[value], ',') AS [values]
FROM table1 t1
JOIN table2 t2 ON t1.[id] = t2.[parentId]
WHERE t1.[fullname] = '最牛的商品'
GROUP BY t1.[fullname]

上述代码中,通过 INNER JOIN 将主表 table1 和明细表 table2 进行联表查询,并使用 WHERE 子句过滤出 fullname 为“最牛的商品”的记录。接着使用 GROUP BY 子句对 fullname 进行分组,并使用字符串聚合函数 STRING_AGG 将 t2 表中的 value 字段按逗号拼接成一个字符串,并使用 AS 关键字指定新列名为 values。这样就可以将多条数据合并为一条并拼接了特定字段的值。

所谓的多条合并,其实就是分组查询,了解下 group by