我们的表存储了订单的行号。是否可以将它们连接成一个字符串,其中第一行和最后一行连续的行用连字符分隔,非连续的行用逗号分隔?有些订单包含同一商品的 100 多行,我们不想逐行列出,而是希望将它们压缩为“行:1-100”,或“行:1-20、25、30-50、75-100”等等……
来源
线 | 物品 |
---|---|
1 | 苹果 |
2 | 苹果 |
3 | 苹果 |
4 | 橙子 |
5 | 苹果 |
6 | 橙子 |
7 | 苹果 |
8 | 苹果 |
9 | 橙子 |
10 | 橙子 |
当前查询
使用 STRING_AGG 后,我按行对它们进行了分组,但我不知道如何识别连续的部分并提取连字符的首/尾值。LAG 和 LEAD 可以与 STRING_AGG 一起使用吗?
SELECT
CONCAT('Lines: ', STRING_AGG(Line, ', ') WITHIN GROUP (ORDER BY Line)) AS [Line],
Item
FROM Table
GROUP BY Item
当前结果
线 | 物品 |
---|---|
线路:1、2、3、5、7、8 | 苹果 |
线路:4、6、9、10 | 橙子 |
期望结果
线 | 物品 |
---|---|
线路:1-3、5、7-8 | 苹果 |
线路:4、6、9-10 | 橙子 |