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 Server 2014
答案 0 :(得分:1)
代码表明这是针对SQL Server的?如果是正确的并且我正确理解了您想要实现的目标,则根本不需要游标。
可以通过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 Server 2017或更高版本,甚至更简单:
SELECT tsg1.sscc,
string_agg(tsg1.orders, ', ') orders
FROM dbo.tim_stockgeo tsg1
GROUP BY tsg1.sscc;