大佬,这边有SQLServer测试了下:
如果您数据库版本较是2017及以上,那么就支持STRING_AGG函数:
可以试试下方这种方式:
- SELECT
- YEAR([出货时间]) AS 交付年份,
- MONTH([出货时间]) AS 交付月份,
- 订单号,
- MIN([出货时间]) AS 出货时间,
- SUM([出货数量]) AS 出货数量,
- STRING_AGG([交付人员], ', ') AS 交付人员,
- STRING_AGG([备注], ', ') AS 备注
- FROM [cs_1_21]
- GROUP BY
- YEAR([出货时间]),
- MONTH([出货时间]),
- [订单号]
- ORDER BY
- 交付年份,
- 交付月份,
- [订单号];
复制代码 如果是旧版2016及以下话,不知道此函数比较麻烦,可以试试下方这种方式:
- SELECT
- -- 计算交付月份,使用 YEAR 和 MONTH 提取年月
- YEAR(出货时间) AS 交付年份,
- MONTH(出货时间) AS 交付月份,
- 订单号,
- -- 获取最早的出货时间
- MIN(出货时间) AS 出货时间,
- -- 汇总出货数量
- SUM(出货数量) AS 出货数量,
- -- 拼接交付人员
- STUFF((
- SELECT ', ' + 交付人员
- FROM cs_1_21 AS t2
- WHERE t2.订单号 = t1.订单号 AND YEAR(t2.出货时间) = YEAR(t1.出货时间) AND MONTH(t2.出货时间) = MONTH(t1.出货时间)
- FOR XML PATH('')
- ), 1, 2, '') AS 交付人员,
- -- 拼接备注
- STUFF((
- SELECT ', ' + 备注
- FROM cs_1_21 AS t2
- WHERE t2.订单号 = t1.订单号 AND YEAR(t2.出货时间) = YEAR(t1.出货时间) AND MONTH(t2.出货时间) = MONTH(t1.出货时间)
- FOR XML PATH('')
- ), 1, 2, '') AS 备注
- FROM cs_1_21 AS t1
- GROUP BY
- YEAR(出货时间),
- MONTH(出货时间),
- 订单号
- ORDER BY
- 交付年份,
- 交付月份,
- 订单号;
复制代码 效果如下:
|