【问题标题】:Calculate value from last day and same branch of the company计算最后一天和公司同一分支机构的价值
【发布时间】:2021-03-24 15:02:51
【问题描述】:

我需要帮助计算每日目标值减去第二天差值的值,即对于公司的每个分支机构,都有目标值和销售额值。如果在 01 我达到了我的目标,在 02 目标值会更低(差值在下图中)。

因此,根据下图,如果在第 10 天分行的第 1 天,我的目标是 6129.10,而我卖出了 7397,那么当天的差额将是 -1267.9,那么第 02 天的目标值应该是 6129.10 + ( -1267.9) = 4861.13。如何在 T-SQL 中执行此操作?

Before:

DT  ID_FILIAL   VL_SALES    VL_GOAL VL_DIFFERENCE
01/12/2020  10   7.397,00    6.129,10   -1.267,90 
01/12/2020  11   11.129,00   10.322,60  -806,40 
01/12/2020  12   23.690,00   20.967,80  -2.722,20 
02/12/2020  10   8.403,00    6.129,03   -2.273,97 
02/12/2020  11   9.871,00    10.322,58   451,58 
02/12/2020  12   20.559,00   20.967,74   408,74 


After:

DT  ID_FILIAL   VL_SALES    VL_GOAL VL_DIFFERENCE
01/12/2020  10   7.397,00    6.129,10   -1.267,90 
01/12/2020  11   11.129,00   10.322,60  -806,40 
01/12/2020  12   23.690,00   20.967,80  -2.722,20 
02/12/2020  10   8.403,00    4.861,13   -3.541,87 
02/12/2020  11   9.871,00    9.516,18   -354,82 
02/12/2020  12   20.559,00   18.245,54  -2.313,46 

【问题讨论】:

  • 1) 请不要使用图像作为数据,使用格式化文本。如果您想让那些协助您添加 DDL/DML 以创建示例数据的人变得非常容易。 2) 请向我们展示您尝试过并遇到的问题。您可能正在寻找诸如滞后之类的窗口函数。
  • 很抱歉,我无法粘贴为格式化文本,我会尝试插入。我尝试在同一张表上使用 JOIN 并使用 ROW NUMBER() 但没有成功,所以我需要一些想法。
  • @DaleK 感谢您的提示,我更新了问题并得到了正确答案。

标签: sql sql-server tsql datetime sum


【解决方案1】:

这看起来像一个窗口总和:

select t.*,
    sum(vl_goal - vl_sales) over(partition by id_filial) + vl_sales as new_vgoal,
    sum(vl_goal - vl_sales) over(partition by id_filial) as new_vl_difference
from mytable t
    

【讨论】:

  • 感谢回复,问题是第一行应该是VL_GOAL原来的,不是新的目标。有什么办法吗?
【解决方案2】:

认为你想要一个累积的总和:

select t.*,
       sum(vl_sales - vl_goal) over (partition by id_filial order by dt) as vl_difference
from t;

【讨论】:

    猜你喜欢
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2012-03-12
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多