2015-02-07 22 views
5

Ho eseguito query SQL ma non ho eseguito alcuna procedura di scrittura che utilizza cicli, quindi sono perso qui. Sto usando Oracle SQL Developer. Può essere fatto in SQL o PL/SQLCiclo attraverso una tabella in Oracle PL/SQL

Ho una tabella che assomigliano a questo:

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 

Come posso collegare attraverso questo tavolo in modo che possa prendere un giocatore punteggio totale per tutte le partite giocate. Il risultato sarebbe stato questo:

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

Inoltre credito extra Se avessi voluto afferrare solo i giochi 1 2?


EDIT: Ci scusiamo per non essere chiaro, ma ho bisogno di fare questo con un ciclo, anche se si può fare senza di essa.

+1

Che cosa vuoi dire, "può essere fatto in SQL o PL/SQL"? SQL non ha alcun concetto di loop, è un linguaggio basato su set. –

risposta

11

soluzione dopo edizione Post

Questa procedura lista punteggi per data game_id. Se si omette il parametro verranno sommati tutti i giochi:

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; 

soluzione precedente:

Non hanno bisogno procedura che, proprio semplice query:

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

Grazie per la risposta, ma ho bisogno che sia effettivamente una procedura con un ciclo – AmericanSuave

+0

Fine. Vorrei dividere i tuoi dati in due tabelle: giochi e giocatori, ma dipende da te. –

Problemi correlati