asm*_*mgx 1 sql t-sql sql-server string-aggregation string-agg
我的桌子看起来像这样
Color Order
------------
Red 49
Blue 32
Green 80
Green 30
Blue 93
Blue 77
Red 20
Green 54
Red 59
Red 42
Red 81
Green 35
Blue 91
Run Code Online (Sandbox Code Playgroud)
我的查询是
SELECT Color, Count(*) AS Count, STRING_AGG(Order,',') AS AggOrder
FROM MyTable
GROUP BY Color
Run Code Online (Sandbox Code Playgroud)
当我按颜色分组并聚合时,我得到未排序的订单
像这样的东西
Color Count AggOrder
------------------------------
Red 5 49,20,59,42,81
Blue 4 32,93,77,91
Green 4 80,30,54,35
Run Code Online (Sandbox Code Playgroud)
问题:AggOrder 无序 49,20,59,42,81
我想订购
所以最终结果是
Color Count AggOrder
------------------------------
Red 5 20,42,49,59,81
Blue 4 32,77,91,93
Green 4 30,35,54,80
Run Code Online (Sandbox Code Playgroud)
我尝试了这个查询
SELECT Color, Count(*) AS Count, STRING_AGG(Order,',') AS AggOrder
FROM MyTable
GROUP BY Color
ORDER BY Order
Run Code Online (Sandbox Code Playgroud)
但这会产生错误。
知道如何解决这个问题吗?
ORDER BY在您的调用中添加一个子句STRING_AGG:
SELECT
Color,
COUNT(*) AS Count,
STRING_AGG([Order], ',') WITHIN GROUP (ORDER BY CAST([Order] AS INT)) AS AggOrder
FROM MyTable
GROUP BY Color;
Run Code Online (Sandbox Code Playgroud)
该Order专栏有两条评论。首先,ORDER是一个保留的 SQL Server 关键字,您在问题中粘贴的查询甚至不会按给定的方式运行,因为ORDER当用作数据库对象名称时需要转义。您应该避免使用关键字命名您的列、表等。其次,假设Order列是文本,如果您想将其用作数字进行排序,则应首先将其转换为整数。