基于条件的运行总计

Posted

技术标签:

【中文标题】基于条件的运行总计【英文标题】:Conditioned based Running total 【发布时间】:2019-11-26 06:53:22 【问题描述】:

我正在重写这篇文章!

这是我的查询

SELECT ITEMNUM,
  STORELOC,
  TRANSDATE,
  ACTUALDATE,
  CONDITIONCODE,
  ISSUETYPE,
  QUANTITY,
  CURBAL,
  '' AS Balnce_In_Condition_02,
  ENTERBY,
  MEMO,
  DOCNUM
FROM MATUSETRANS
WHERE ITEMNUM = 'Z95-04-BHH811550'
AND STORELOC  ='04'
AND TRANSDATE >'01-JAN-19'
ORDER BY TRANSDATE DESC;

这是我的结果

我需要运行我在图像中单独编写的 Balance_In_Condition_02。基本上我的需要是创建一个从 CONDITIONCODE 01 发出的物品的库存报告,而相同的物品出现在 CONDITIONCODE 02 中。物品经常是 ISSUE 和 RETURN。希望你能理解我的问题

【问题讨论】:

嗨@user2807258,不知道别人,但对我来说,你的描述很难理解。请更加努力地解释你需要什么,然后当你完成后自己阅读并尝试看看你是否会毫不费力地理解它 - 这样你就会知道它对我们来说没问题...... 希望现在的问题可以理解。 Since there is 2 item return at 3rd level record 你想在这里说什么?你想对 CONDITION 02 和 CONDITION 01 说什么? 当有任何物品在条件 02 上返回时,条件 02 的总数量将显示在 BALANCEINCON2 列。因为在我的记录中,当时条件 02 上有 0 项,然后条件 02 处有 0+2=2。但是如果条件 02 中存在任何项目,则总和将播种在 BALANCEINCON2 列。我需要基于 TRANSDATE 的 BALANCEINCON2 中条件 02 项的总和。 很抱歉,但这对我没有帮助。也许对其他人来说会。我在这里没有看到任何名为 Condition 02 或 Condition 01 的列,如果您在 where 子句中引用第一个和第二个条件,那么我根本不清楚这个解释......祝你好运! 【参考方案1】:

首先有条件地求和数量,仅适用于带有conditioncode = '02' 的行,就像在我的内部查询中一样。然后使用解析lead() 填充其余行的值。

select itemnum, storeloc, transdate, quantity, conditioncode,
       nvl(bal02, lead(bal02) ignore nulls 
         over (partition by itemnum order by transdate desc)) balance02
  from (
    select itemnum, storeloc, transdate, quantity, conditioncode,
           case conditioncode when '02' then sum(quantity) 
             over (partition by itemnum order by transdate desc) end bal02
      from matusetrans mtu
      where itemnum = 'Z95-04-B806073A' and storeloc = '04')
  order by transdate desc;

dbfiddle

我不确定您是对所有数量求和还是仅对 02 行求和,因为在您的示例中,这些总和是相等的。在第二种情况下,而不是 sum(quantity) 使用:

sum(case conditioncode when '02' then quantity end) over (...

【讨论】:

以上是关于基于条件的运行总计的主要内容,如果未能解决你的问题,请参考以下文章

Access Query中基于项目和日期的运行总计

Power Query 中是不是有一种方法可以根据基于文本值重置的两列计算运行总计?

选择运行总计,直到达到特定 SUM

使用 BigQuery 中的条件计算运行总计

Power BI Desktop DAX 重启运行总计列

在 Pyspark/Hive 中有条件的运行总计