使用FOR XML将行转换为逗号分隔的列表时出现错误

时间:2019-02-13 08:14:51

标签: sql-server

考虑一个包含多行和多列的数据库表: 按salesid分组

salesid mrp sku    type 
1        20  58pl   pending
1        25  58po   Delivered
2        70  32pf   Dispatched
3        85  24jh   Pendig
2        58  32pg   Delivered

我想要什么:

salesid mrp    sku        type
1       20,25  58pl,58po  Pendig,Delivered
2       70,58  32pf,32pg  Dispatched,Delivered
3       85     24jh       Pendig

我正在使用Visual Studio 2017 C#和数据库MSSQL 2017

我尝试了什么:

 select distinct p.[salesid],
  STUFF((SELECT distinct ', ' + t1.type
         from payment_trans t1
         where p.[salesid] = t1.[salesid]
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,2,'') type

        ,
  STUFF((SELECT distinct ', ' + t2.Merchant_SKU
         from payment_trans t2
         where p.[salesid] = t2.[salesid]
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,2,'') sku 
        ,
  STUFF((SELECT distinct ', ' + t3.stockupId
         from payment_trans t3
         where p.[salesid] = t3.[salesid]
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,2,'') stockupid 
        from payment_trans p where p.stockupId!=-1

它给我一个错误:(SQL错误(245):将varchar值','转换为数据类型int时转换失败。) 当我分隔整数值时

1 个答案:

答案 0 :(得分:0)

t1.type,t2.Merchant_SKU或t3.stockupId是整数,需要在连接它们之前将其强制转换为varchar。

或者只需将','和带有“,”的列分开,然后让FOR XML执行转换。