[英]Getting Sum of rows and putting back the result to the rows as a separate column
我目前面临的挑战是获取按特定字段分组的行的总和,然后将结果放回每一行。
我要按的组是“客户,组和年份”,并获取金额和月份的总和。
这是数据集的示例,右2列是我要添加的列:
Client Group Year Amount Months Sum(Amount) Sum(Months)
Client1 Group1 Current Year 100 3 300 10
Client1 Group1 Current Year 200 7 300 10
Client2 Group1 Year-1 150 1 400 3
Client2 Group1 Year-1 250 2 400 3
Client3 Group1 Year-2 500 11 500 11
Client3 Group2 Year-3 600 12 600 12
我目前拥有的代码结构如下:
Select
Data.Client, data.Group, Calc_field2.Year, data.Amount, Calc_field.Months
From
(Select [Column adjustments] From [Source] where [criteria]
Union ALL
Select * from [Source#2] where [Criteria]
) as Data
Cross Apply
(Data.[End Date] - Data.[Start Date]) as Calc_Field(Months)
[Rolling Year formula from Data] as Calc_Field2(Year)
因此在考虑添加交叉申请:
Cross Apply
(Select
Data.Client, Data.Group, Calc_field2.Year,
SUM(Data.Amount) as 'SUM Amount',
SUM(Calc_Field.Months) as 'SUM Months'
Group by
Data.Client, Data.Group, Calc_field2.Year
) as MONTH_AMOUNT_SUM
然后将其添加为主体
MONTH_AMOUNT_SUM.[SUM Month], MONTH_AMOUNT_SUM.[SUM Amount]
我有种感觉,它是行不通的,得到了以下方面的证实:
每个GROUP BY表达式必须包含至少一个不是外部引用的列。
有人会建议最好的方法吗?
谢谢卢卡斯
使用窗口功能。 查询中唯一更改的部分是select
:
select Data.Client, data.Group, Calc_field2.Year, data.Amount, Calc_field.Months,
sum(data.amount) over (partition by data.client, data.group, calc_field2.year),
sum(data.months) over (partition by data.client, data.group, calc_field2.year)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.