我有3张桌子。
司机,旅行,旅行腿
在驱动程序表中,列为E#,L#,STATUS。 在旅行表中,列是T#,L#,REG#,trip_DATE 在tripLeg表中,列是T#,LEG#,DEPARTURE,DESTINATION
首先我尝试了一个SQL查询:
select d.l#, count(tg.leg#) as total_no_of_legs
from driver d left outer join trip t on (d.l# = t.l#)
left outer join tripleg tg on (t.t# = tg.t#)
group by d.l#;
我得到的结果是:
L# Total_no_of_legs
-----------------------------
11111 20
等等。
这是所有T#腿的腿总数# e.g
T#1 's leg# = 3
T#2's leg# = 10
T#3's leg# = 7
总计= 20这就是为什么L#11111总腿数为20的原因。 但是我想知道每个L#的最大腿数#是10。 如何进行查询以通过T#找出最大数量的LEG#组?
之后,我如何真正开始将其转换为PL / SQL语句?
整天都在想着读书。仍然无法找到解决方案
答案 0 :(得分:0)
但我想找出每个L#
的最大腿数#
也许我错过了什么,但不是那么简单:
select d.l#,
max(tg.leg#) as max_leg_nr
from driver d
left outer join trip t on (d.l# = t.l#)
left outer join tripleg tg on (t.t# = tg.t#)
group by d.l#
我认为没有必要将其放入存储过程中。
要将其放入返回结果的函数中,您需要一个流水线函数:
create type leg_info as object (l# integer, max_leg_nr integer);
/
create type leg_info_list as table of leg_info
/
create or replace function get_max_leg_info
return leg_info_list
PIPELINED
as
r_info leg_info;
begin
r_info := leg_info(null, null);
for p_rec in ( .... here goes the select ... )
loop
r_info.l# := p_rec.l#;
r_info.max_leg_nr := p_rec.max_leg_nr ;
pipe row(r_row);
end loop;
return;
end;
/
然后您可以使用此功能:
select *
from table(get_max_leg_info())