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
发布于 2018-08-06 01:11:50
代码表明这是针对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;SQL Fiddle
https://stackoverflow.com/questions/51695640
复制相似问题