SQL Server:按两列分组,并将第三列与两组的分叉相加

Posted

技术标签:

【中文标题】SQL Server:按两列分组,并将第三列与两组的分叉相加【英文标题】:SQL Server : Group by two columns and Sum a third column with the bifurcation of two groups 【发布时间】:2017-04-24 09:23:02 【问题描述】:

我正在创建一个发票系统,我需要使用两个过滤器(即monthcategory_of_service)来获取total_amount 的总和

到目前为止,我可以根据两个过滤器使用 GROUP BY 子句,但我的 SUM 是作为整体计算的,而不是根据组。

我已经提到了各种问题,但无法找到我的解决方案。

mysql: Group by two columns and sum

month | category_of_service | total_amount
------|---------------------|-------------
12    | EB                  | 1000
12    | EB                  | 1200
12    | DG                  | 1500
12    | DG                  | 2000

我能做的是

month | category_of_service | total_amount
------|---------------------|-------------
12    | EB                  | 5700
12    | DG                  | 5700

我真正想要的是

month | category_of_service | total_amount
------|---------------------|-------------
12    | EB                  | 2200
12    | DG                  | 3500

注意:有多个monthscategory_of_services

我使用的查询是:

SELECT 
    month, category_of_service, SUM(total_amount) AS TotalAmount
FROM  
    dbo.report
GROUP BY 
    month, category_of_service

这是我的输出截图:

enter image description here

【问题讨论】:

您发布的查询无法返回5700,它将是您想要的结果。 @Shubham Katta 您发布的查询是正确的查询,除非您错过在查询中写入 category_of_service 您的查询 100% 正确 但我得到的输出与查询不符。@dnoeth 我也分享了相关图片 【参考方案1】:
 ;With Cte([month] , category_of_service , total_amount)
AS
(
SELECT 12    , 'EB', 1000 Union all
SELECT 12    , 'EB', 1200 Union all
SELECT 12    , 'DG', 1500 Union all
SELECT 12    , 'DG', 2000 
)
, Result
AS
(
SELECT * ,ROW_NUMBER()OVER(PARTITION by total_amount ORDER BY [month] desc)  AS Seq FROM
(
SELECT [month] , category_of_service ,Sum(total_amount)OVER(PARTITION BY [month],category_of_service ORDER BY [month])AS total_amount  FROM Cte
)dt
)
SELECT [month] , category_of_service , total_amount FROM Result WHERE seq=1

输出

month | category_of_service | total_amount
------|---------------------|-------------
12    | EB                  | 2200
12    | DG                  | 3500

【讨论】:

为了提高您回答的质量,请说明是什么导致提问者出现问题,它是如何做到的,以及您的回答如何解决问题.

以上是关于SQL Server:按两列分组,并将第三列与两组的分叉相加的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 数据框:按两列分组,然后对另一列进行平均

VB.NET 按两列分组并将结果写入数组

按两列排序,为啥不先分组呢?

如何对两列求和并通过减去它们的聚合 SQL 和 C# 在第三列中显示结果?

通过将两列分组并对第三列数据求和来过滤python

按两列分组,其中一列是时间戳