首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求和记录,并添加在sql中总结的内容

求和记录,并添加在sql中总结的内容
EN

Stack Overflow用户
提问于 2017-10-20 11:37:09
回答 2查看 39关注 0票数 0

我有一张简单的桌子,看起来像这张:

代码语言:javascript
复制
company_Id    user_Id    price   sub_price
   123456      11111      200      NULL
   123456      11111      500      NULL
   456789      22222      300      NULL

我想通过对价格进行汇总,将包含计数(*) >= 2的记录合并为一行,但需要注意的是,sub_price列中所总结的内容。所需的输出应该如下所示:

代码语言:javascript
复制
 company_Id    user_Id    price   sub_price
   123456      11111      700      200,500
   456789      22222      300      300

是否有任何简单的方法来实现期望的输出?非常感谢您的提前帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-20 11:46:30

这是一个可能的解决方案;关于将多个行连接到单行的更多信息,您可以找到这里

代码语言:javascript
复制
DECALRE @tbl AS table (
    company_Id int
    ,user_Id int
    ,price int
    ,sub_price varchar(25)
)

INSERT INTO @tbl values (123456, 11111, 200, NULL)
INSERT INTO @tbl values (123456, 11111, 500, NULL)
INSERT INTO @tbl values (456789, 22222, 300, NULL)


SELECT
    company_Id
    ,user_Id
    ,SUM(price) AS price
    ,STUFF(
        (SELECT ',' + cast(price as varchar)
        FROM @tbl
        WHERE company_Id = a.company_id
            AND user_Id = a.user_Id 
        FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,1,'') AS sub_price
FROM @tbl a
GROUP BY company_Id, user_Id
票数 0
EN

Stack Overflow用户

发布于 2017-10-20 11:41:09

可以使用listagg将组的元素转换为字符串:

代码语言:javascript
复制
SELECT ...
     , LISTAGG(price, ',') WITHIN GROUP (ORDER BY price) sub_price
  FROM ...

虽然listagg是SQL标准,但它是尚未得到所有数据库的支持。然而,大多数数据库以不同的名称提供类似的功能,例如string_agg在PostgreSQL和Sever (自2017年以来)或group_concat在MySQL中。

更多信息:http://modern-sql.com/feature/listagg (如果不支持listagg,也会显示替代方案)

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

https://stackoverflow.com/questions/46848293

复制
相关文章

相似问题

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