2015-02-07 7 views
5

मैं एसक्यूएल प्रश्नों किया है, लेकिन किसी भी प्रक्रिया लेखन छोरों का उपयोग करता है नहीं किया है में एक टेबल के माध्यम से लूप तो मैं यहां खो में हूँ। मैं ओरेकल एसक्यूएल डेवलपर का उपयोग कर रहा हूँ।ओरेकल 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 

मैं कैसे इस तालिका के माध्यम से लूप ताकि मैं एक खिलाड़ियों खेला सभी खेलों के लिए कुल अंक प्राप्त कर सकते हैं कर सकते हैं: एसक्यूएल या PL/SQL

में किया जा सकता है मैं एक मेज है कि इस के समान है। परिणाम इस तरह होगा:

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

इसके अलावा अतिरिक्त क्रेडिट क्या होगा यदि मैं सिर्फ हड़पने के लिए चाहता था खेल कहते हैं कि 1 2?


संपादित करें: स्पष्ट नहीं किया जा रहा है, लेकिन मैं फिर भी यह इसके बिना किया जा सकता है एक पाश के साथ ऐसा करने की क्या ज़रूरत है के लिए खेद है। पोस्ट संस्करण के बाद

+1

आपका क्या मतलब है, "एसक्यूएल या पीएल/एसक्यूएल में किया जा सकता है"? एसक्यूएल में लूप की कोई अवधारणा नहीं है, यह एक सेट-आधारित भाषा है। –

उत्तर

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

+0

के साथ एक प्रक्रिया होने की आवश्यकता है। मैं आपके डेटा को दो टेबलों में विभाजित करूंगा: गेम और प्लेयर, लेकिन यह आपके ऊपर है। –