2015-02-07 31 views
5

'daki bir tablonun içinden dolaşın SQL sorgularını yaptım ancak döngüler kullanan herhangi bir yordam yazmadım, bu yüzden burada kaybolacağım. Oracle SQL Developer kullanıyorum. Ben oyunculara oynanan tüm oyunlar için toplam puanı bu tablodan aracılığıyla ben döngü yakalayabilir, böylece nasılOracle 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 

: SQL veya PL/SQL

yapılabilir bunu andıran bir tablo var. Sonuç şu şekilde olurdu:

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

Ayrıca ekstradan daha fazla bilgi almak istiyorsam ne demek istedim oyunları 1 2?


DÜZENLEME: açık olmak ama onsuz yapılabilir rağmen bir döngü ile bunu yapmak gerekiyor için üzgünüm. Verilen game_id için yazılan baskısında sonra

+1

Ne demek, "SQL veya PL/SQL'de yapılabilir"? SQL'in herhangi bir döngü kavramı yok, set-tabanlı bir dil. –

cevap

11

Çözüm

Bu prosedür liste puanları. Eğer Parametre atlarsanız tüm oyunlar toplanacağını:

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; 

Önceki çözüm:

Sen, bunun için sadece basit bir sorgu işlemi gerekmez:

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

Yanıt için teşekkürler, ancak aslında bir döngü – AmericanSuave

+0

Bitti bir yordam olması gerekiyor. Verilerinizi iki tabloya bölerdim: oyunlar ve oyuncular, ama size kalmış. –