Date 和 Date-1 中每个供应商的平均金额

问题描述 投票:0回答:0

我正在尝试找到一种更快、更简洁、更简单的方法来计算两个月/期间显示的金额的平均值。在我的数据集中,每个供应商有几个记录超过一年的时期,我想知道每个供应商的总金额的两个时期的平均值。

因此,如果供应商 ABC 在 1 月有两个帖子,2 月有 1 个帖子,3 月有 1 个帖子,我希望供应商 ABC 总共有两行。 第一个将显示 ABC 平均值(一月总数 + 二月总数)。第二行将显示 ABC 平均值(2 月总数和 3 月总数)。

我可以想到一种方法来做到这一点,就像下面这样(二月份):

select 
CONCAT(YEAR(Date_Col),MONTH(Date_Col)) AS Date_Col
,Vendor_Col
,SUM(Amt_Col) AS Amt_Col
CASE
    WHEN MONTH(Date_Col) = '02' THEN SUM(CASE
        WHEN MONTH(Date_Col) = '02' or MONTH(Date_Col) = '01' THEN Amt_Col)/2 AS '2MonthAvg'

Group by Date_Col, Vendor_col

这意味着我必须制作 11 个单独的 WHEN 语句: 我认为分组会负责显示供应商级别 2 个月的平均值,但是有没有比上面更流畅的方法来使其动态化?

这是我正在处理的数据示例

Date_Col  Vendor_col   Amt_col
202201   ABC          150.789,41
202201   ABC           75.678,85
202201   DEF          845.678,45
202201   GHI          450.657,43
202202   ABC           50.694,45
202202   DEF          135.624,86
202202   DEF          123.250,15
202202   GHI          450.000,00
202203   ABC           12.600,50
202203   DEF           60.600,60

我希望我的问题是有道理的,如果我需要详细说明,请告诉我。

我还没有真正尝试过任何东西,因为我在弄清楚逻辑时遇到了麻烦,但是我一直在搞乱的是一个动态的

SUM(CASE WHEN
但我无法弄清楚如何让它动态地比较两个日期,因为我正在处理历史数据而不是 MontH(Today())。

我看到的输出是这样的:

Date_Col  Vendor_col   Amt_col
202201   ABC          226.468,30 (total Jan amt, since I want the average with prior month)   
202201   DEF          845.678,45
202201   GHI          450.657,43
202202   ABC          138.581,36 ((sum of feb + sum of jan)/2)
202202   DEF          552.276,73
202202   GHI          450.328,72
202203   ABC           31.647,48 ((sum of mar + sum of jan)/2)
202203   DEF          159.737,81

我也研究过 LAG,但据我了解,LAG 会查看前一行,如果我有几个供应商项目,每个时期应该有独立的总和/平均值,这就没有意义了?

sql sql-server sum case average
© www.soinside.com 2019 - 2024. All rights reserved.