Sql 如何显示所有结果?

Sql 如何显示所有结果?,sql,plsql,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,''); INS

我下面的表格由不同的颜色的球队组成,其中的球队踢过另一种颜色的比赛并获得了积分

   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;
现在,在执行过程之后,例如
executecolors_SCORES('RED')
我得到了颜色的结果:

  • 如果参数是红色的,我会得到
    (17)

  • 若参数为蓝色我得到
    (21)

我的问题是:

  • 是否可以显示两个团队的结果,并按最高总数排序

  • 或者,我是否只需要一个函数

非常感谢您的帮助,提前谢谢


为什么不在一个查询上使用“只打开光标”来提供这些信息呢?比如:

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);
有了这个查询,就不需要函数了

更新 如果您想使用该功能,可以尝试以下操作:

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);

我还没有测试过这个,因为我没有靠近电脑,但它应该可以工作。

谢谢你的回复,非常感谢。我希望看到它作为一个函数工作:)