【问题标题】:XML PATH SQL SERVERXML 路径 SQL 服务器
【发布时间】:2018-11-15 18:21:59
【问题描述】:

我有数据

TIPE| NILAI
PSX     10
GE      10
EG      10
SX      20
SXL     20
SZ      20

如何获得类似的输出

psx/ge/eg = 10
sx/sxl/sz = 20

这是我的语法

ISNULL(CAST((SELECT CONVERT(VARCHAR,TIPE) + ' / '        
FROM tabel
FOR XML PATH('')) AS varchar(max)),'')

【问题讨论】:

    标签: sql sql-server tsql string-aggregation


    【解决方案1】:

    试试这个:

    declare @tbl table (TIPE varchar(5), NILAI int);
    insert into @tbl values
    ('PSX', 10),
    ('GE', 10),
    ('EG', 10),
    ('SX', 20),
    ('SXL', 20),
    ('SZ', 20);
    
    select NILAI,
           (select TIPE + '/' from @tbl where t.NILAI = NILAI for xml path('')) [TIPE]
    from @tbl t
    group by NILAI
    
    --for sql server 2017 or newer
    select NILAI, string_agg(TIPE, '/') TIPE
    from @tbl
    group by NILAI
    

    【讨论】:

    • STRING_AGG 可从 SQL Server 2017 获得,而且应该是 string_agg(TIPE , '/') DEMO
    • @lad2025 我认为它也应该这样工作,但感谢您的评论:)
    【解决方案2】:

    试试这个

    DECLARE @tbl table (TIPE varchar(5), NILAI int);
    insert into @tbl values
    ('PSX', 10),
    ('GE', 10),
    ('EG', 10),
    ('SX', 20),
    ('SXL', 20),
    ('SZ', 20);
    SELECT DISTINCT  STUFF((SELECT '/ '+TIPE 
            FROM @tbl i WHERE i.NILAI=o.NILAI FOR XML PATH ('')),1,1,'')
                  + ' = ' + CAST(NILAI AS VARCHAR) AS [RequiredResult] 
    FROM @tbl o
    

    结果

    RequiredResult
    --------------------
     PSX/ GE/ EG = 10
     SX/ SXL/ SZ = 20
    

    演示:http://rextester.com/WYAJ22189

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 2019-05-17
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多