基于条件的运行总计

时间:2019-11-26 06:53:22

标签: sql database oracle plsql

我正在重写此帖子!

这是我的查询

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;

这是我的结果

enter image description here

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

1 个答案:

答案 0 :(得分:0)

有条件地第一笔求和数量,仅适用于带有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 (...