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);
我还没有测试过这个,因为我没有靠近电脑,但它应该可以工作。谢谢你的回复,非常感谢。我希望看到它作为一个函数工作:)