基于条件的运行总计
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 (...
【讨论】:
以上是关于基于条件的运行总计的主要内容,如果未能解决你的问题,请参考以下文章