如何编写含CAST与GROUP BY的SQL查询以生成合并式购物清单输出
解决方法
没问题,我来帮你搞定这个查询!你需要先统计每个买家每种商品的购买数量,再把这些统计结果拼接成目标格式的字符串,结合GROUP BY、CAST和XML拼接就能实现。以下是可以直接运行的完整查询:
SELECT b.buyer_name AS name, STUFF( ( SELECT ', ' + CAST(g.count_num AS VARCHAR) + 'x ' + g.name FROM ( -- 先统计每个买家每种商品的购买数量 SELECT id_buyers, name, COUNT(*) AS count_num FROM grocery GROUP BY id_buyers, name ) g WHERE g.id_buyers = b.id FOR XML PATH(''), TYPE ).value('.', 'VARCHAR(MAX)'), 1, 2, '' -- 去掉开头的", " ) AS stuffed_lists FROM buyers b;
步骤解释:
- 统计子查询:先对
grocery表按id_buyers和name分组,用COUNT(*)算出每种商品的购买次数,得到类似(1, 'milk', 2)这样的结果。 - XML拼接:通过
FOR XML PATH('')把同一个买家的所有商品统计结果拼接成一串,比如', 2x milk, 1x ham'。 - STUFF处理:用
STUFF函数去掉拼接字符串开头多余的,,得到干净的目标格式。 - 关联买家表:最后和
buyers表关联,确保每个买家都出现在结果里(如果需要处理无购买记录的买家,可以在外层加COALESCE把空值转为默认内容)。
运行这个查询后,得到的结果就和你提供的wanted_output表完全一致啦!
内容的提问来源于stack exchange,提问作者hexedecimal
相关产品推荐
相关产品推荐

