Sql server SQL游标和VARCHAR重复
我有以下数据:Sql server SQL游标和VARCHAR重复,sql-server,sum,cursor,varchar,Sql Server,Sum,Cursor,Varchar,我有以下数据: 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 @cO
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
我使用SQL server 2014代码表明这是针对SQL server的?如果这是正确的,并且我正确地理解了,您想要实现什么,根本不需要光标 可通过
选择:
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 2017版或更高版本,则更简单:
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 2014,因此第一个查询是针对我的:)
SELECT tsg1.sscc,
string_agg(tsg1.orders, ', ') orders
FROM dbo.tim_stockgeo tsg1
GROUP BY tsg1.sscc;