我的表格由不同的颜色团队组成,其中播放另一种颜色并收到积分。
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>或许,我是否只需要 功能 ?
非常感谢帮助,提前谢谢。
答案 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附近,但它应该可以工作。