如何显示所有结果?

时间:2013-04-20 10:52:49

标签: sql plsql

我的表格由不同的颜色团队组成,其中播放另一种颜色并收到积分

   CREATE TABLE COLOURS
   (C_ID VARCHAR2 (4) NOT NULL,
    HC VARCHAR2 (4),
    AC VARCHAR2 (4),
    TOTAL NUMBER (2),
    SCORES NUMBER (2));

  INSERT INTO COLOURS VALUES
  ('C1', 'RED', 'BLUE',8,'');

  INSERT INTO COLOURS VALUES
  ('C2', 'RED', 'BLUE', 9,'');

  INSERT INTO COLOURS VALUES
  ('C3','BLUE', 'RED', 10,'');

  INSERT INTO COLOURS VALUES
  ('C4','BLUE', 'RED', 11,'');

接下来,我创建了一个计算团队总积分的函数:

 CREATE OR REPLACE FUNCTION TOTAL  (i_HC   COLOURS.HC%TYPE)
 RETURN NUMBER              
  IS
v_COLOURS_total     COLOURS.total%TYPE;  

   BEGIN
    SELECT SUM (TOTAL)
    INTO v_COLOURS_total             
    FROM COLOURS            
    WHERE 
HC = i_HC;  

 IF v_COLOURS_total  IS NULL THEN             
  v_COLOURS_total:=0;                   

 END IF;

 RETURN v_COLOURS_total;            

 END;

最后一个调用该函数并逐个显示每个团队结果的过程:

   CREATE OR REPLACE PROCEDURE COLOURS_SCORES (dnum VARCHAR2)
   IS                                                     
   W_HC   COLOURS.HC%TYPE;       
   W_C_ID COLOURS.C_ID%TYPE;
   W_TOTAL  COLOURS.TOTAL%TYPE;             
   W_SCORES     NUMBER(2);              
   TOTALSCORES  NUMBER(5,2);    


    CURSOR COLOURS_CURSOR IS            
SELECT HC,C_ID,TOTAL,SCORES 
FROM  COLOURS
    WHERE HC = dnum;
    BEGIN

    DBMS_OUTPUT.PUT_LINE(' '||'COLOURS POINTS '||'  '); 

   OPEN COLOURS_CURSOR;

    TOTALSCORES :=TOTAL(dnum);    
     LOOP

FETCH COLOURS_CURSOR INTO W_HC,W_C_ID,W_TOTAL, W_SCORES;
EXIT WHEN COLOURS_CURSOR%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(W_C_ID || '----'|| W_TOTAL ||'  ');


    END LOOP;
    DBMS_OUTPUT.PUT_LINE('---------------------------------------');
    DBMS_OUTPUT.PUT_LINE(W_HC||' '||'FINAL SCORE = '||TO_CHAR(TOTALSCORES));
    DBMS_OUTPUT.PUT_LINE('---------------------------------------');
    CLOSE COLOURS_CURSOR; 

     END;

现在,执行该程序后,例如EXECUTE COLOURS_SCORES ('RED'); 我得到了颜色的结果:

  • 如果参数为 RED ,我会(17)

  • 如果参数 BLUE ,我会(21)

我的问题是:

  • 是否可以按最高总数显示两个团队和订单的结果?

    < / LI>
  • 或许,我是否只需要 功能

  

非常感谢帮助,提前谢谢。

1 个答案:

答案 0 :(得分:0)

为什么不使用只打开一个查询的光标,它会给你这个信息?类似的东西:

SELECT HC, SUM (TOTAL) as Total
FROM COLOURS            
GROUP BY HC
ORDER BY SUM(TOTAL) DESC

使用此查询不需要该功能。

更新

如果您想使用该功能,可以尝试以下方法:

SELECT HC, C_ID, TOTAL, SCORES, TOTAL(HC) as TOTALSCORES
FROM  COLOURS
ORDER BY TOTAL(HC);

我没有测试过这个,因为我不在PC附近,但它应该可以工作。