1
我想解決這個問題,但是我找不到正確的解決方案。在XML表中練習XMLTABLE e XML
從表中獲取matchRound關於球隊的信息將在第三輪中發揮作用。在第三輪比賽中將打出第一輪對陣第二輪最佳陣容的最佳陣容。 訪問第三輪的一般規則是:
- 在贏得比賽
- 的最高數量在同等情況下,獲勝的是打進最後一球
- 如果相等的球隊,勝主隊
這是表:
CREATE TABLE matchRound (
round_num INTEGER,
play_date DATE,
home_team CHAR(2),
visiting_team CHAR(2),
goals XMLTYPE,
PRIMARY KEY(play_date, home_team)
);
INSERT INTO matchRound VALUES (1, TO_DATE('1/1/2012', 'DD/MM/YYYY'), 'MI', 'IN', xmltype.createxml('<?xml version="1.0"?><goals><player team="MI" minute="62">De Rossi</player><player team="MI" minute="25">Pirlo</player></goals>'));
INSERT INTO matchRound VALUES (1, TO_DATE('2/1/2012', 'DD/MM/YYYY'), 'MI', 'GE', xmltype.createxml('<?xml version="1.0"?><goals><player team="MI" minute="30">De Rossi</player><player team="GE" minute="25">Cannavaro</player></goals>'));
INSERT INTO matchRound VALUES (1, TO_DATE('3/1/2012', 'DD/MM/YYYY'), 'IN', 'GE', xmltype.createxml('<?xml version="1.0"?><goals></goals>'));
INSERT INTO matchRound VALUES (2, TO_DATE('4/1/2012', 'DD/MM/YYYY'), 'TO', 'JU', xmltype.createxml('<?xml version="1.0"?><goals><player team="JU" minute="40">Gattuso</player><player team="JU" minute="90">Rossi</player></goals>'));
INSERT INTO matchRound VALUES (2, TO_DATE('5/1/2012', 'DD/MM/YYYY'), 'TO', 'SM', xmltype.createxml('<?xml version="1.0"?><goals><player team="TO" minute="20">Gialli</player><player team="TO" minute="30">Neri</player><player team="TO" minute="50">Verdi</player></goals>'));
INSERT INTO matchRound VALUES (2, TO_DATE('6/1/2012', 'DD/MM/YYYY'), 'JU', 'SM', xmltype.createxml('<?xml version="1.0"?><goals><player team="JU" minute="20">Gattuso</player><player team="JU" minute="40">Rossi</player></goals>'));
這是m的一部分y解決方案:
SELECT T1.round_num, T1.win, count(T1.win) as "GOALS"
FROM (
SELECT PG.round_num, PG.home_team AS "home", V.win
FROM matchRound PG,
XMLTABLE('let $x := //player[@team=$s1]
let $y := //player[@team=$s2]
let $z := //player
return if(count($x)=count($y)) then <win>{data($z[last()]/@team)}</win>
else if(count($x)>=count($y)) then <win>{$s1}</win>
else <win>{$s2}</win>'
PASSING PG.goals, PG.home_team AS "s1", PG.visiting_team AS "s2"
COLUMNS
win VARCHAR2(255) PATH '/win'
) V
) T1
GROUP BY T1.round_num, T1.win
ORDER BY T1.round_num;
你能幫我嗎?
太感謝你了,我不知道該功能的「保持」,「過」和SQL標準?或者是Oralce的功能? – Mark116
不太清楚老實說標準是什麼;這些也受SQL Server支持,我相信,但我只與Oracle合作。你可以閱讀更多關於[分析功能](http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions004.htm)和[keep last](http://docs.oracle.com/ cd/E11882_01/server.112/e41084/functions083.htm)/ [first](http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions065.htm)。 –