【问题标题】:order by in string_agg does not seems to work在 string_agg 中排序似乎不起作用
【发布时间】:2018-08-06 09:43:55
【问题描述】:

我有一个这样的表#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 应该排在倒数第三位,但它排在第二位。

【问题讨论】:

  • 您的line 请输入?好像是varchar。作为'1'
  • 谢谢。这就是问题所在。发布它作为答案,我会接受。

标签: sql sql-server sql-server-2017


【解决方案1】:

您的line_novarchar,您通常会注意到

“1”

所以,只需简单地将 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

【讨论】:

    【解决方案2】:

    由于您的 line_no 似乎是 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2017-08-31
      • 2015-05-20
      • 1970-01-01
      相关资源
      最近更新 更多