首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL游标SUM VARCHAR重复

SQL游标SUM VARCHAR重复
EN

Stack Overflow用户
提问于 2018-08-05 23:23:51
回答 1查看 38关注 0票数 0
代码语言:javascript
复制
 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;

我有这些数据:

代码语言:javascript
复制
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

我想以这样的方式呈现:

代码语言:javascript
复制
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

有人能帮我吗?:)

我尝试使用游标:

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

因此,我的输出数据如下所示。:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-06 01:11:50

代码表明这是针对SQL Server的?如果这是正确的,并且我正确地理解了您想要实现的目标,那么根本就不需要光标。

这可以通过SELECT来完成

代码语言:javascript
复制
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版或更高版本,则更加简单:

代码语言:javascript
复制
SELECT tsg1.sscc,
       string_agg(tsg1.orders, ', ') orders
       FROM dbo.tim_stockgeo tsg1
       GROUP BY tsg1.sscc;

SQL Fiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51695640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档