SQL 游标 SUM VARCHAR 重复

SQL cursor SUM VARCHAR duplicate

 DECLARE @sscc as INT;
 DECLARE @orders as varchar(255);
 DECLARE @value as varchar(255);
 DECLARE @cOrders as CURSOR;
 SET @value = 'Orders : '

 SET @cOrders = CURSOR FOR
 SELECT SSCC,ORDERS FROM dbo.TIM_StockGeo tsg WITH(NOLOCK)

 OPEN @cOrders

 FETCH NEXT FROM @cOrders INTO @sscc,@orders

 WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @value = @value + ' ' + @orders;
        PRINT CAST(@SSCC AS VARCHAR(64)) +  ' ' + @value;
        FETCH NEXT FROM @cOrders INTO @sscc,@orders;
    END

CLOSE @cOrders;
DEALLOCATE @cOrders;

我有那个数据:

10005555    /18/56789/01/1
10005555    /18/56654/01/1
10005555    /18/52090/01/1
10001111    /18/11111/01/1
10001111    /18/12121/01/1
10002222    /18/89283/01/1

我想以这种方式呈现:

10005555    /18/56789/01/1, /18/56654/01/1, /18/52090/01/1
10001111    /18/11111/01/1, /18/12121/01/1
10002222    /18/89283/01/1

有人能帮帮我吗? :)

我试过使用光标:

但我不知道如何将重复数据归因于变量。

所以我的输出数据看起来像这样..:

10005555 Orders :  /18/56789/01/1
10005555 Orders :  /18/56789/01/1 /18/56654/01/1
10005555 Orders :  /18/56789/01/1 /18/56654/01/1 /18/52090/01/1
10001111 Orders :  /18/56789/01/1 /18/56654/01/1 /18/52090/01/1 /18/11111/01/1
10001111 Orders :  /18/56789/01/1 /18/56654/01/1 /18/52090/01/1 /18/11111/01/1 /18/12121/01/1
10002222 Orders :  /18/56789/01/1 /18/56654/01/1 /18/52090/01/1 /18/11111/01/1 /18/12121/01/1 /18/89283/01/1

我使用SQL服务器2014

代码表明这是针对 SQL 服务器的?如果那是对的,而且我理解正确,那么你想要达到的效果,根本不需要光标。

可以用 SELECT:

SELECT tsg1.sscc,
       STUFF((SELECT ', ' + tsg2.orders
                     FROM dbo.tim_stockgeo tsg2
                     WHERE tsg2.sscc = tsg1.sscc
                     FOR XML PATH('')), 1, 2, '') orders
       FROM dbo.tim_stockgeo tsg1
       GROUP BY tsg1.sscc;

或者,如果您已经在使用 SQL 服务器版本 2017 或更高版本,则更简单:

SELECT tsg1.sscc,
       string_agg(tsg1.orders, ', ') orders
       FROM dbo.tim_stockgeo tsg1
       GROUP BY tsg1.sscc;

SQL Fiddle