0

私は3つのテーブルを持っています。

ドライバー、旅行、トリップレッグ

ドライバー テーブルの列は、E#、L#、STATUS です。trip テーブルの列は 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

合計 = 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 に答える