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;
I have that data :
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
I want present this at that way :
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
Could anyone help me ? :)
I tried with cursor :
But i don't know how ascribe to variable only duplicate data.
so my output data looks like this.. :
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
I use SQL server 2014
The code suggests this is for SQL Server? If that's right and I correctly understand, what you want to achieve, there's no need for a cursor at all.
It can be done with a 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;
Or, if you're already using SQL Server version 2017 or above, even simpler:
SELECT tsg1.sscc,
string_agg(tsg1.orders, ', ') orders
FROM dbo.tim_stockgeo tsg1
GROUP BY tsg1.sscc;