0

我有 3 张桌子。

司机, 旅行, tripLegs

在驱动程序表中,列是 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# 的腿的总腿数,例如

T#1 's leg# = 3
T#2's leg# = 10
T#3's leg# = 7

Total = 20 这就是为什么 L# 11111 总腿数是 20。但我想找出每个 L# 的最大腿数是 10。我如何进行查询以找出由 T 组成的 LEG# 组的最大数量#?

之后,我如何真正开始将其转换为 PL/SQL 语句?

整天都在想,看书。仍然找不到解决方案

4

1 回答 1

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())
于 2012-11-25T09:53:46.890 回答