繁体   English   中英

获取行总和并将结果作为单独的列放回到行中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM