gpt4 book ai didi

sql - 如何在 Oracle 中组合结果集?

转载 作者:行者123 更新时间:2023-12-04 16:47:12 27 4
gpt4 key购买 nike

我有一个过程,它有一个输入参数和一个输出游标。该光标给出的结果如下所示:

0100 | 0
0130 | 1
0200 | 2
0230 | 0
...

第一列是静态时间码。第二列是在给定日期的那个时间段内安排了多少次的汇总。

这个过程是:

PROCEDURE DAILYLOAD (datep IN DATE, results OUT SYS_REFCURSOR)
AS
BEGIN
Open results for
SELECT RUN_TIME_C, COUNT (SCH_RPT_I)
FROM ITS_SCH_RPT_RUN_TIME
LEFT OUTER JOIN
ITS_SCH_RPT
ON ( RUN_TIME_C = RUN_TIME1_C
OR RUN_TIME_C = RUN_TIME2_C
OR RUN_TIME_C = RUN_TIME3_C)
WHERE EXP_DATE_D IS NULL
OR datep < exp_date_d AND datep > start_date_d AND SUSPENDED_USER='N'
AND ( ( (TO_CHAR (datep, 'D') = 1) AND RUN_SUNDAY_C = 'Y')
OR ( (TO_CHAR (datep, 'D') = 2) AND RUN_MONDAY_C = 'Y')
OR ( (TO_CHAR (datep, 'D') = 3) AND RUN_TUESDAY_C = 'Y')
OR ( (TO_CHAR (datep, 'D') = 4) AND RUN_WEDNESDAY_C = 'Y')
OR ( (TO_CHAR (datep, 'D') = 5) AND RUN_THURSDAY_C = 'Y')
OR ( (TO_CHAR (datep, 'D') = 6) AND RUN_FRIDAY_C = 'Y')
OR ( (TO_CHAR (datep, 'D') = 7) AND RUN_SATURDAY_C = 'Y'))
GROUP BY RUN_TIME_C
ORDER BY RUN_TIME_C;
END DAILYLOAD;

我想使用不同的参数多次从包装过程中调用此过程,以便我可以得出每周负载和每月负载。从概念上讲,这将通过诸如 union all 之类的方法连接各个结果集并按第一列对每个分组的第二列求和进行分组来完成。

现在,我有类似的东西

Dailyload(datep, results1);
Dailyload(datep + 1, results2);
...

OPEN results FOR
SELECT run_time_c,
SUM(rpt_option_i)
FROM SELECT *
FROM results1
UNION ALL
SELECT *
FROM results2
UNION ALL ...
GROUP BY run_time_c
ORDER BY run_time_c

我可以在 Oracle 中执行此操作吗? Fetch with bulk collect 看起来很有前途,但我没有看到在我的特定场景中使用它的好方法。

最佳答案

您可以将其作为联合执行,包括标识组的列。个人选择会或多或少地复制您的 DailyLoad SP 正在做的事情。

 select foo.Mygroup, sum(foo.col1) 
from
(
select 'A' as MyGroup, col1 WHERE ...
union all
select 'B' as MyGroup, col1 WHERE ...
union all
select 'C' as MyGroup, col1 WHERE ...
) as Foo
group by MyGroup

如果事先不知道分组的个数,可以构建一个符合这个基本结构的动态sql语句。

如果组的数量太大以至于您的动态语句太大,您可以使用存储过程将每次调用的结果连同 MyGroup 列一起推送到临时表中。然后您可以通过针对临时表的 select 语句发出您的组。

关于sql - 如何在 Oracle 中组合结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6228739/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com