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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CREATE TABLE AS SELECT(CAST)(二)-ConceptAST
- oracle cast 用法OracleAST
- Oracle SQL optimization-2(zt)OracleSQL
- CREATE TABLE AS SELECT(CAST)(一)-ORA-1652AST
- SQL中的cast()函式SQLAST函式
- Oracle的Cast的用法OracleAST
- oracle function函式castOracleFunction函式AST
- oracle常用經典SQL查詢(zt)OracleSQL
- [zt] Oracle與SQL Server的互連OracleSQLServer
- Table 引數總結 (ZT)
- Oracle CAST函式不生效OracleAST函式
- Oracle sql 語句中帶有特殊的字元處理OracleSQL字元
- Oracle11g新特性:SQL Result Cache [zt]OracleSQL
- ORACLE SQL語句優化技術分析(zt)OracleSQL優化
- ORACLE DBA常用SQL指令碼工具->管理篇(zt)OracleSQL指令碼
- oracle動態sql執行table表中儲存的sqlOracleSQL
- SQL Server 2016 函式:CASTSQLServer函式AST
- ORACLE SQL調優之'PLAN_TABLE' is old versionOracleSQL
- 使用 on prebuilt table 建立物化檢視 (ZT)UI
- 使用 on prebuilt table 建立物化檢視(zt)UI
- sql中使用特殊字元SQL字元
- 應遵循的PL/SQL編碼規則 - ORACLE (zt)SQLOracle
- Oracle中CAST函式使用簡介OracleAST函式
- C++ set and multisetC++
- 【NULLS】Oracle對SQL排序後NULL值位置的“特殊關照”NullOracleSQL排序
- Oracle 20c 新特性:SQL 巨集支援(SQL Macro)Scalar 和 Table 模式OracleSQLMac模式
- MYSQLDUMP TABLE IN SQL FORMATMySqlORM
- Oracle 去特殊字元Oracle字元
- [zt] SQL存取Oracle當中掃描資料的方法SQLOracle
- C++之static_cast,dynamic_cast,const_castC++AST
- SQL特殊字元處理zzSQL字元
- SQL常用的特殊寫法SQL
- [Oracle] Partition table exchange Heap tableOracle
- Linq to SQL: System.InvalidCastException: Specified cast is not validSQLASTException
- PL/SQL表(oracle記憶體表)---table()函式用法SQLOracle記憶體函式
- Flink Table/SQL API 規劃 —— Dynamic TableSQLAPI
- oracle enqueue(zt)OracleENQ
- SQL Server專題 [zt]SQLServer