将 SQL 行连接到逗号分隔列表中[重复]

问题描述 投票:0回答:2

当数据匹配时,我在尝试在 SQL 中连接逗号分隔符列表时遇到问题。我有一个包含 6 列的表。我想检查 LicenceNumbers 是否匹配,如果 LicenceNumbers 相同,则将 ItemsNumbers 连接成逗号分隔符列表。

这是我的查询,但它将返回结果合并为 2,但将所有许可证添加到每一行

SELECT DISTINCT
    w2.Order,
    w2.Customer, 
    w2.Contract, 
    w2.Licence, 
    w2.CSSNTName, 
    CASE 
        WHEN w2.Licence= w1.LicenceTHEN
        (SELECT '[' + STRING_AGG(ISNULL(Item, ' '), ',') FROM #WorkingTable2) + ']'
        ELSE '[' + w2.Item+ ']' 
    END AS Item
FROM 
    #WorkingTable2 w2 
    INNER JOIN #WorkingTable2 w1 ON w1.Licence= w2.Licence

桌子

| Order || Customer || Contract || Licence || Item || CSSNT |
| ----- || -------- || -------- || ------- || ---- || ----- |
| 5762  || 5273     || 70703US  || 420D3   || 8.10 || ABC02 |
| 5762  || 5273     || 70703US  || 420D3   || 8.9  || ABC02 |                           
| 1234  || 1111     || 123US    || 1234    || 9.10 || ABC01 |

我在寻找什么结果

| Order || Customer || Contract || Licence || Item      || CSSNT |
| ----- || -------- || -------- || ------- || --------- || ----- |
| 5762  || 5273     || 70703US  || 420D3   || [8.9,8.10]|| ABC02 |                         
| 1234  || 1111     || 123US    || 1234    || [9.10]    || ABC01 |
sql-server concatenation string-agg
2个回答
0
投票

您可以使用简单的聚合/分组方法

例子

Declare @YourTable Table ([Order] varchar(50),[Customer] varchar(50),[Contract] varchar(50),[Licence] varchar(50),[Item] varchar(50),[CSSNT] varchar(50))
Insert Into @YourTable Values 
 (5762,5273,'70703US','420D3',8.10,'ABC02')
,(5762,5273,'70703US','420D3',8.9,'ABC02')
,(1234,1111,'123US','1234',9.10,'ABC01')
 
Select [Order]
      ,[Customer]
      ,[Contract]
      ,[Licence]
      ,[Item]   = concat('[',string_agg(item,','),']')
      ,[CSSNT]
 From @YourTable
 Group By [Order]
      ,[Customer]
      ,[Contract]
      ,[Licence]
      ,[CSSNT]

结果


0
投票

让我知道这是否有效

SELECT
w2.Order,
w2.Customer,
w2.Contract,
w2.Licence,
w2.CSSNTName,
CASE
    WHEN w2.Licence = w1.Licence THEN
        (SELECT STRING_AGG(Item, ',') FROM #WorkingTable2 WHERE Licence = w2.Licence)
    ELSE
        w2.Item
END AS Item
FROM
#WorkingTable2 w2
INNER JOIN #WorkingTable2 w1 ON w1.Licence = w2.Licence
© www.soinside.com 2019 - 2024. All rights reserved.