PL/SQL 函数与 If
PL/SQL funtion with If
我有一个生产记录系统,其中用户 selects 日期、时间、区域、生产线、班次和型号。介绍现场一小时的布片数量pieces
。添加一条记录后,用户再次输入件数,但它还必须出现在另一个字段中,Total pieces
,总件数,即当前一条加上前一条记录的总和。
这是table
Date-------Time---------Area-------Line----Shift-----Model----Pieces-------Total volume
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例如),select数据库中日期、地区、线路、班次、型号相同但时间为前一个(hour-1)的记录的条数据。
我不知道这是否可以完成,非常感谢您的帮助。
我不会将 total_volume
存储到 table 中;使用解析形式的 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>
我有一个生产记录系统,其中用户 selects 日期、时间、区域、生产线、班次和型号。介绍现场一小时的布片数量pieces
。添加一条记录后,用户再次输入件数,但它还必须出现在另一个字段中,Total pieces
,总件数,即当前一条加上前一条记录的总和。
这是table
Date-------Time---------Area-------Line----Shift-----Model----Pieces-------Total volume
8/8/20-------7--------------A-----------1---------1--------XC1--------2--------------------2
8/8/20-------8--------------A-----------1---------1--------XC1--------3--------------------58/8/20-------9--------------A-----------1---------1--------XC1--------2--------------------7
该功能不要在一天的开始添加任何内容,后面的记录只要日期、行、地区、班次、型号相同即可。
我曾计划使用 PL/SQL 函数,如果时间是 7(开始),它显示与 pieces
中输入的数字相同的数字,但如果是另一个时间(8例如),select数据库中日期、地区、线路、班次、型号相同但时间为前一个(hour-1)的记录的条数据。
我不知道这是否可以完成,非常感谢您的帮助。
我不会将 total_volume
存储到 table 中;使用解析形式的 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>