sql - 在 string_agg 中排序似乎不起作用

标签 sql sql-server sql-server-2017

我有一个像这样的表#tmp:

recid       DefaultDimension    DefaultDimensionName    line_no
5637423499  Default             Employee                7
5637423499  1001                Product                 8
5637423499  100                 Region                  2
5637423499  1                   Routing                 17
5637423499  115                 Section                 5
5637423499  999                 Unit                    6
5637423499  1510                Branch                  3
5637423499  A                   CabinClass              14
5637423499  0B                  Carrier_Property        9
5637423499  103                 Channel                 16
5637423499  104                 Department              4
5637423499  113                 Division_CustomerType   1

我想根据 line_no 的升序连接 DefaultDimension 和 DefaultDimensionName 列

这是我写的查询,但我没有按顺序得到它:

select recid, 
STRING_AGG(DefaultDimension, '-')  WITHIN GROUP (ORDER BY line_no ASC) DefaultDimension,
STRING_AGG(DefaultDimensionName, '-') WITHIN GROUP (ORDER BY line_no ASC) DefaultDimensionName 
from #tmp
group by recid

结果:

recid       DefaultDimension                                    DefaultDimensionName
5637423499  113-A-103-1-100-1510-104-115-999-Default-1001-0B    Division_CustomerType-CabinClass-Channel-Routing-Region-Branch-Department-Section-Unit-Employee-Product-Carrier_Property

如您所见,CabinClass 应该排在倒数第 3 位,但它排在了第 2 位。

最佳答案

您的line_novarchar,您通常会注意到

'1' < '14' < '16 < '17' < '2'

所以,只要简单地将varchar解析成int就可以解决问题。

select recid, 
STRING_AGG(DefaultDimension, '-')  WITHIN GROUP (ORDER BY CAST(line_no AS int) ASC) DefaultDimension,
STRING_AGG(DefaultDimensionName, '-') WITHIN GROUP (ORDER BY CAST(line_no AS int)ASC) DefaultDimensionName 
from #tmp
group by recid

关于sql - 在 string_agg 中排序似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51704734/

相关文章:

sql - 安装 Microsoft SQL Server 2008 时出现错误

sql - 为什么 hasOne 关系中的外键需要位于引用表中?

java - 如何在 Java 中为具有组合键的表编写删除 SQL 语句?

sql-server - 获取 SQL Server 中最后更新行的标识

asp.net - 查询输出 ELMAH_Error sql server 表的 AllXml 列的内容

sql-server - 根据值将SQL列拆分为多个列

php mysql 没有以正确的方式更新行

c# - Web 配置中的连接字符串

sql - 当名称与表名相同时,内联索引定义失败

sql-server - 如果@Parameter = NULL,则选择所有行