【问题标题】:SQL Running total by specific part特定部分的 SQL 运行总计
【发布时间】:2020-08-20 13:26:54
【问题描述】:

查找基于特定项目订单数量详细级别的运行总计类型计算。我有一个按项目的现有库存(在报告生成时)。

    create table SALES (
    ID INT,
    PART VARCHAR(12),
    QTY INT)

    CREATE TABLE INVENTORY (
    ID INT,
    PART VARCHAR (12),
    QTY INT)

INSERT INTO SALES (ID, PART, QTY)
VALUES (1, 1260, 10), 
(2, 1260, 10),
(3, 1153, 5),
(4, 1260, 5),
(5, 279, 20)

INSERT INTO INVENTORY (ID, PART, QTY)
VALUES (1000, 1260, 20),
(1010, 1153, 0),
(1100, 279, 100)

加载上述数据后,我得到以下结果:

  SELECT A.ID AS 'ORDER ID', A.PART, A.QTY AS 'SALES QTY' , B.QTY AS 'INVENTORY'
    FROM SALES A 
    LEFT OUTER JOIN INVENTORY B ON A.PART = B.PART
    ORDER BY 2

ORDER ID    PART    SALES QTY   INVENTORY
3           1153    5           0
4           1260    5           20
1           1260    10          20
2           1260    10          20
5           279     20          100

我正在寻找每个订单行级别的运行总计,如下所示(预计):

ORDER ID    PART    SALES QTY   INVENTORY   PROJECTED
3           1153    5           0           -5
4           1260    5           20          15
1           1260    10          20          5
2           1260    10          20          -5
5           279     20          100         80

我是该网站的新发布者,过去曾多次使用其他用户的问题.....如果我以错误的格式发布了某些内容,我深表歉意。感谢您的任何建议。

【问题讨论】:

    标签: sql join window-functions


    【解决方案1】:

    您可以使用窗口函数。但是,您确实需要一个排序列,并且在这里使用哪个排序列并不明显。我用问号(?)表示它:

    select 
        s.id order_id, 
        s.part, 
        s.qty sales_qty, 
        i.qty inventory,
        i.qty - sum(s.qty) over(partition by s.part order by ?) projected
    from sales s
    left outer join inventory i on i.part = s.part
    order by 2
    

    【讨论】:

    • 显然数据多了很多,“order by”到底是做什么的?
    • @shanegair:它定义了给定零件的销售数量计算顺序。例如,对于零件 1260,您正在处理销售 id 4,然后是 1,然后是 2。您需要一个可用于定义排序的列(显然不是sales(id))。
    【解决方案2】:

    这听起来像是一个窗口函数和算术:

    SELECT S.ID AS ORDERID, S.PART, S.QTY AS SALESQTY , I.QTY AS INVENTORY,
           SUM(I.QTY) OVER (PARTITION BY S.PART ORDER BY S.ID) - S.QTY
    FROM SALES S LEFT JOIN
         INVENTORY I
         ON I.PART = S.PART
    ORDER BY 2
    

    【讨论】:

      猜你喜欢
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 2023-03-23
      相关资源
      最近更新 更多