【问题标题】:SQL Sum QTY Between Two DatesSQL Sum QTY 两个日期之间
【发布时间】:2022-01-24 05:03:00
【问题描述】:

我有这个示例表:

Product    |   Category    |    QTY      |   Load Date
-----------+---------------+-------------+--------------
   1            Alpha           10         Jan. 1, 2021
   2            Beta            20         Jan. 1, 2021
   3           Charlie          20         Jan. 1, 2021
   1            Alpha           30         Jan. 2, 2021
   3           Charlie          30         Jan. 3, 2021
   1            Alpha          -50         Jan. 4, 2021
   2            Beta           -20         Jan. 4, 2021
   4            Delta           40         Jan. 4, 2021

我想添加一个列,该列将根据上一个加载日期对数量求和,并按产品和类别分组。

我怎样才能得出如下所示的输出?

Product    |   Category    |    QTY      |   Load Date   |  Sum_QTY
-----------+---------------+-------------+---------------+----------
   1            Alpha           10         Jan. 1, 2021       10
   2            Beta            20         Jan. 1, 2021       20
   3           Charlie          20         Jan. 1, 2021       20
   1            Alpha           30         Jan. 2, 2021       40
   3           Charlie          30         Jan. 3, 2021       50
   1            Alpha          -50         Jan. 4, 2021      -10
   2            Beta           -20         Jan. 4, 2021        0
   4            Delta           40         Jan. 4, 2021       40

您的帮助意义重大。

谢谢

【问题讨论】:

  • 请向我们展示您的尝试并解释卡在哪里。

标签: sql sql-server tsql


【解决方案1】:

如果我没有正确阅读问题,使用SUM as an analytic function 将使查询变得相当简单;

SELECT *,
 SUM("QTY") OVER (PARTITION BY "Product", "Category" ORDER BY "Load Date") Sum_QTY
FROM Table1
ORDER BY "Load Date", "Product", "Category"

An SQLfiddle to test with

【讨论】:

  • 我认为最好使用 [Load Date] 而不是 "Load Date" 。 . .
  • @zambee 除了在 DBMS 和 [ ] 之间使用 " " 是可移植的(ish)之外,是否有区别? (老实说,如果有区别,我不知道)
  • 您好@Joachim Isaksson 先生,我认为 [] 更好。因为在 Dynamic SQL "" 中会给开发和调试带来很大的问题。
【解决方案2】:

另一种选择是使用外部应用

select t.*, 
       s.sum_QTY
from   Table1 t
  outer apply ( select sum(t2.QTY) sum_QTY from Table1 t2 where t2.Category = t.Category and t2.[Load Date] <= t.[Load Date] ) s
ORDER BY [Load Date], Product, Category

SQL Fiddle

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 2021-05-22
    • 2015-06-19
    • 2018-05-06
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2021-11-28
    相关资源
    最近更新 更多