oracle 特殊SQL(TABLE( CAST( MULTISET()[zt]
求條sql語句
成績表
--xh 學號 cj 成績
create table b_cj(xh varchar2(50),cj number);
insert into b_cj values('1',67);
insert into b_cj values('2',63);
insert into b_cj values('3',77);
insert into b_cj values('4',68);
insert into b_cj values('5',97);
insert into b_cj values('6',62);
insert into b_cj values('7',77);
insert into b_cj values('8',79);
insert into b_cj values('9',73);
insert into b_cj values('10',65);
排名名額表
--mc 名次 rs 人數 jj 獎金
create table b_pmme(mc varchar(10),rs int,jj number)
insert into b_pmme values('1',3,'100');
insert into b_pmme values('2',4,'50');
insert into b_pmme values('3',5,'10');
想要的結果
根據成績表的成績降序排列,按排名名額表的名額確定排名和獎金。排名時不考慮相同成績。
如下結果:
學號 成績 名次 獎金
5 97 1 100
8 79 1 100
3 77 1 100
7 77 2 50
9 73 2 50
4 68 2 50
1 67 2 50
10 65 3 10
2 63 3 10
6 62 3 10
--xh 學號 cj 成績
create table b_cj(xh varchar2(50),cj number);
insert into b_cj values('1',67);
insert into b_cj values('2',63);
insert into b_cj values('3',77);
insert into b_cj values('4',68);
insert into b_cj values('5',97);
insert into b_cj values('6',62);
insert into b_cj values('7',77);
insert into b_cj values('8',79);
insert into b_cj values('9',73);
insert into b_cj values('10',65);
排名名額表
--mc 名次 rs 人數 jj 獎金
create table b_pmme(mc varchar(10),rs int,jj number)
insert into b_pmme values('1',3,'100');
insert into b_pmme values('2',4,'50');
insert into b_pmme values('3',5,'10');
想要的結果
根據成績表的成績降序排列,按排名名額表的名額確定排名和獎金。排名時不考慮相同成績。
如下結果:
學號 成績 名次 獎金
5 97 1 100
8 79 1 100
3 77 1 100
7 77 2 50
9 73 2 50
4 68 2 50
1 67 2 50
10 65 3 10
2 63 3 10
6 62 3 10
解決方法:
SELECT c.xh,c.cj,b.mc,b.jj
FROM (SELECT c.*,ROW_NUMBER() OVER(ORDER BY cj DESC) rn FROM b_cj c) c
,(SELECT b.mc,b.jj,ROW_NUMBER() OVER(ORDER BY b.mc) rn
FROM b_pmme b
, TABLE( CAST( MULTISET( SELECT NULL
FROM DUAL
CONNECT BY LEVEL <= b.rs
)
AS SYS.ODCIVARCHAR2LIST )
)
) b
WHERE c.rn=b.rn;
FROM (SELECT c.*,ROW_NUMBER() OVER(ORDER BY cj DESC) rn FROM b_cj c) c
,(SELECT b.mc,b.jj,ROW_NUMBER() OVER(ORDER BY b.mc) rn
FROM b_pmme b
, TABLE( CAST( MULTISET( SELECT NULL
FROM DUAL
CONNECT BY LEVEL <= b.rs
)
AS SYS.ODCIVARCHAR2LIST )
)
) b
WHERE c.rn=b.rn;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11990065/viewspace-748074/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle SQL optimization-2(zt)OracleSQL
- oracle enqueue(zt)OracleENQ
- SQL Access Advisor(zt)SQL
- SQL中的cast()函式SQLAST函式
- SQL Server 2016 函式:CASTSQLServer函式AST
- ORACLE LARGE MEMORY(zt)Oracle
- oracle event 2 (zt)Oracle
- oracle job管理(zt)Oracle
- Oracle sql 語句中帶有特殊的字元處理OracleSQL字元
- oracle time_zone(zt)Oracle
- AUTO START ORACLE ON LINUX(zt)OracleLinux
- Oracle 20c 新特性:SQL 巨集支援(SQL Macro)Scalar 和 Table 模式OracleSQLMac模式
- ORACLE MTS的介紹(zt)Oracle
- Oracle's Parallel Execution Features(zt)OracleParallel
- How Oracle Store Number internal(zt)Oracle
- SQL優化器探討(zt)SQL優化
- Oracle 去特殊字元Oracle字元
- Oracle:TABLE MONITORINGOracle
- Oracle table selectOracle
- 【TUNE_ORACLE】列出走了TABLE ACCESS FULL的SQL參考OracleSQL
- SQL Server 2005效能調整一(zt)SQLServer
- SQL Server 2005效能調整二(zt)SQLServer
- Oracle 特殊字元轉義Oracle字元
- oracle cache table(轉)Oracle
- Oracle Pipelined Table(轉)Oracle
- Flink的Table以及SQLSQL
- 修改Oracle資料庫字符集(zt)Oracle資料庫
- oracle9i下streams複製(zt)Oracle
- Oracle Pipelined Table Functions(轉)OracleFunction
- C++強制型別轉換:static_cast、dynamic_cast、const_cast、reinterpret_castC++型別AST
- STL使用篇__multiset
- Oracle多粒度封鎖機制研究二(zt)Oracle
- 淺析 Flink Table/SQL APISQLAPI
- 7.41 CASTAST
- ORACLE9I升級到10G(zt)Oracle
- google guava集合之MultisetGoGuava
- SQL中欄位比較型別不匹配錯誤:‘cannot be cast to’SQL型別AST
- reinterpret_cast 和 static_cast 的區別AST
- Oracle Table建立引數說明Oracle