将行插入查询结果(总和)

dva*_*ria 5 sql sum insert

我有一份报告,显示客户订购的产品及其价格:

CompanyA    Product 7    14.99  
CompanyA    Product 3    45.95
CompanyA    Product 4    12.00
CompanyB    Product 3    45.95
CompanyC    Product 7    14.99
CompanyC    Product 3    45.95
Run Code Online (Sandbox Code Playgroud)

我想插入一行汇总每个公司的订单,如下所示:

CompanyA    Product 7    14.99  
CompanyA    Product 3    45.95
CompanyA    Product 4    12.00
               Total:    72.94
CompanyB    Product 3    45.95
               Total:    45.95
CompanyC    Product 7    14.99
CompanyC    Product 3    45.95
               Total:    60.94
Run Code Online (Sandbox Code Playgroud)

这里有一些代码显示了我的查询的基本结构:

SELECT company
   , product
   , price
FROM companyMaster
ORDER BY company,
   , product,
   , price;
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?我在Transact-SQL(Microsoft SQL Server)中写这个.

dva*_*ria 3

感谢大家的反馈/帮助,它至少让我想到了不同的方法。我想出了一些不依赖于我使用的 SQL Server 版本的东西(我们的供应商经常更改版本,因此我必须尽可能地交叉兼容)。

这可能被认为是一种黑客攻击(好吧,它是一种黑客攻击),但它确实有效,并且完成了工作:

SELECT company
   , product
   , price
FROM companyMaster
ORDER BY company,
   , product,
   , price

UNION

SELECT company + 'Total'
   , ''
   , SUM(price)
FROM companyMaster
GROUP BY company

ORDER BY company;
Run Code Online (Sandbox Code Playgroud)

该解决方案基本上使用两个 select 语句的 UNION。第一个与原来的完全相同,第二个产生我需要的总和行。为了正确找到总和行,我对公司名称进行了字符串串联(附加“总计”一词),这样当我按公司名称的字母顺序排序时,总计行将显示在每个公司部分的底部。

最终报告如下所示(不完全是我想要的,但功能相当,只是看起来不太漂亮:

CompanyA    Product 7    14.99  
CompanyA    Product 3    45.95
CompanyA    Product 4    12.00
CompanyA Total           72.94
CompanyB    Product 3    45.95
CompanyB Total           45.95
CompanyC    Product 7    14.99
CompanyC    Product 3    45.95
CompanyC Total           60.94
Run Code Online (Sandbox Code Playgroud)