0

我有一个生产记录系统,用户可以在其中选择日期、时间、区域、生产线、班次和型号。介绍现场一小时内布片的数量pieces。添加另一条记录后,用户再次输入件数,但它还必须出现在另一个字段中Total pieces,即总件数,即当前一条加上上一条记录的总和。

这是桌子

日期--------时间--------面积--------线----班次-----型号----件数-------总容积

8/8/20--------7--------------A------------1---------1 --------XC1--------2--------2
8/8/20-------- -8--------------A------------1---------1--------XC1-- ------3--------------------------------5

8/8/20--------9--------------A------------1---------1 --------XC1--------2--------7

该函数不应该在一天的开始添加任何东西,只要日期、行、区域、班次和型号相同,就应该添加以下记录。

我曾计划使用 PL/SQL 函数,如果时间是 7(开始),它会显示输入的相同数字pieces,但如果是另一个时间(例如 8),请选择数据库中的片段数据具有相同日期、区域、线路、班次和型号但时间为前一个(小时-1)的记录。

我不知道这是否可以做到,我将感谢您的帮助。

4

1 回答 1

2

我不会存储total_volume到表中;sum使用解析形式的函数计算它。毕竟,这是 Oracle Apex(我认为是交互式或经典报告)。

这是一个示例(来自第 1 - 14 行的示例数据;实际执行该工作的查询从第 15 行开始):

SQL> with test (datum, time, model, pieces) as                       -- Expected result:
  2    (select date '2020-08-08', 7 , 'XC1', 2 from dual union all   -- 2
  3     select date '2020-08-08', 8 , 'XC1', 3 from dual union all   -- 5
  4     select date '2020-08-08', 9 , 'XC1', 2 from dual union all   -- 7
  5     --
  6     select date '2020-08-09', 7 , 'XC1', 1 from dual union all   -- 1
  7     select date '2020-08-09', 8 , 'XC1', 3 from dual union all   -- 4
  8     select date '2020-08-09', 10, 'XC1', 2 from dual union all   -- 6
  9     select date '2020-08-09', 11, 'XC1', 1 from dual union all   -- 7
 10     select date '2020-08-09', 12, 'XC1', 6 from dual union all   -- 13
 11     --
 12     select date '2020-08-09', 9 , 'XC2', 5 from dual union all   -- 5
 13     select date '2020-08-09', 10, 'XC2', 4 from dual             -- 9
 14    )
 15  select datum, time, model, pieces,
 16    sum(pieces) over (partition by datum, model order by time) total_volume
 17  from test
 18  order by datum, model, time;

DATUM            TIME MOD     PIECES TOTAL_VOLUME
---------- ---------- --- ---------- ------------
08/08/2020          7 XC1          2            2
08/08/2020          8 XC1          3            5
08/08/2020          9 XC1          2            7
09/08/2020          7 XC1          1            1
09/08/2020          8 XC1          3            4
09/08/2020         10 XC1          2            6
09/08/2020         11 XC1          1            7
09/08/2020         12 XC1          6           13
09/08/2020          9 XC2          5            5
09/08/2020         10 XC2          4            9

10 rows selected.

SQL>
于 2020-08-11T12:34:30.150 回答