2015-02-07 73 views
5

我已經完成了SQL查詢,但還沒有做過任何使用循環的過程編寫,所以我在這裏迷路了。我正在使用Oracle SQL Developer。可以在SQL或PL/SQL循環遍歷Oracle PL/SQL中的表格

做我有像這樣的表:

Person_ID Score Name Game_ID 
1   10 jack 1 
1   20 jack 2 
2   15 carl 1 
2   3  carl 3 
4   17 steve 1 

我如何通過這個表圈,這樣我可以抓住一個玩家玩過的所有遊戲的總成績。結果會是這樣的:

Person_ID Score Name 
1   30 jack 
2   18 carl 
4   17 steve 

也額外信貸如果我想只是說說遊戲1 2?


編輯:對不起,我沒有說清楚,但我確實需要,即使它沒有它也可以做一個循環做到這一點。交版本後

+1

你是什麼意思, 「可以在SQL或PL/SQL中完成」? SQL沒有任何循環的概念,它是基於集合的語言。 – 2015-02-10 07:36:25

回答

11

解決方案

此過程一覽分數給出game_id。如果省略參數的所有遊戲將彙總:

create or replace procedure player_scores(i_game_id number default null) as 
begin 
    for o in (select person_id, name, sum(score) score 
     from games where game_id = nvl(i_game_id, game_id) 
     group by person_id, name) 
    loop 
    dbms_output.put_line(o.person_id||' '||o.name||' '||o.score); 
    end loop; 
end player_scores; 

以前的解決方案:

你不需要的程序爲,只是簡單的查詢:

select person_id, name, sum(score) 
    from your_table 
    where game_id in (1, 2) 
    group by person_id, name 
+0

感謝您的迴應,但我確實需要它實際上是一個循環的程序 – AmericanSuave 2015-02-07 21:31:52

+0

完成。我會將你的數據分成兩個表格:遊戲和玩家,但這取決於你。 – 2015-02-07 22:08:24