巧用row_number() over()函式,選取重複記錄中想要的值
剛在論壇看到一個貼子,感覺不錯,就拿來測試了下,呵~~
[@more@]貼子內容
如何從某欄位重複的多條記錄條件查詢
求一個SQL語句寫法。
現有以問題,表資料如下:
A B C
1 a x
1 a y
1 a z
2 a x
2 a z
3 a x
需要查詢結果:如果A欄位存在相同值,且重複記錄中C欄位存在值為y的記錄,只取C欄位值為Y的記錄,如果重複記錄不存在C欄位為Y的記錄,任取一條A欄位重複的記錄。
如上表所需查詢結果為:
A B C 或者 A B C
1 a y 1 a y
2 a x 2 a z
3 a x 3 a x
下面是解答方法:
現有以問題,表資料如下:
A B C
1 a x
1 a y
1 a z
2 a x
2 a z
3 a x
需要查詢結果:如果A欄位存在相同值,且重複記錄中C欄位存在值為y的記錄,只取C欄位值為Y的記錄,如果重複記錄不存在C欄位為Y的記錄,任取一條A欄位重複的記錄。
如上表所需查詢結果為:
A B C 或者 A B C
1 a y 1 a y
2 a x 2 a z
3 a x 3 a x
下面是解答方法:
SQL> edit;
已寫入 file afiedt.buf
已寫入 file afiedt.buf
1 create table t as
2 ( select 1 as a, 'a' as b, 'x' as c from dual union all
3 select 1 as a, 'a' as b, 'y' as c from dual union all
4 select 1 as a, 'a' as b, 'z' as c from dual union all
5 select 2 as a, 'a' as b, 'x' as c from dual union all
6 select 2 as a, 'a' as b, 'z' as c from dual union all
7* select 3 as a, 'a' as b, 'x' as c from dual )
8 ;
2 ( select 1 as a, 'a' as b, 'x' as c from dual union all
3 select 1 as a, 'a' as b, 'y' as c from dual union all
4 select 1 as a, 'a' as b, 'z' as c from dual union all
5 select 2 as a, 'a' as b, 'x' as c from dual union all
6 select 2 as a, 'a' as b, 'z' as c from dual union all
7* select 3 as a, 'a' as b, 'x' as c from dual )
8 ;
表已建立。
SQL> select a,b,c from
2 (select a,b,c,row_number()over(partition by a order by decode(c,'y',1,2),c) rn
3 from t)
4 where rn=1;
2 (select a,b,c,row_number()over(partition by a order by decode(c,'y',1,2),c) rn
3 from t)
4 where rn=1;
A B C
---------- - -
1 a y
2 a x
3 a x
---------- - -
1 a y
2 a x
3 a x
附:詳細分析下面sql結果
SQL> select t.*,decode(c,'y',1,2) from t;
A B C DECODE(C,'Y',1,2)
---------- - - -----------------
1 a x 2
1 a y 1
1 a z 2
2 a x 2
2 a z 2
3 a x 2
---------- - - -----------------
1 a x 2
1 a y 1
1 a z 2
2 a x 2
2 a z 2
3 a x 2
已選擇6行。
通過order by decode(c,'y',1,2),c 這二例,巧妙將分組後c為Y的值置為最前面.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21251711/viewspace-1019731/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- row_number() over函式函式
- Oracle 中的 ROW_NUMBER() OVER() 分析函式的用法Oracle函式
- ROW_NUMBER() OVER() 分析函式的用法函式
- ROW_NUMBER() OVER函式的基本用法函式
- 視窗函式 row_number 去重複函式
- Oracle使用over()partition by刪除重複記錄Oracle
- 使用Oracle分析函式去除重複記錄Oracle函式
- oracle下資料的排序分組row_number() over()--分析函式,可用於去重Oracle排序函式
- 【原創】使用Oracle分析函式去除重複記錄Oracle函式
- lead lag rank()over()dense_rank()row_number()over()rollupcube幾大分析函式函式
- sql中row_number over語句SQL
- row_number() over,rank() over,dense_rank() over的區別
- MYSQL 一個巧用字元函式巧用字元函式做資料篩選的題MySql字元函式
- SQL中的單記錄函式SQL函式
- 分析函式 over函式
- MYSQL中刪除重複記錄的方法薦MySql
- sum()over()和count()over()分析函式函式
- SQL語句中的rank () over , row_number() over ,rank_dense ()SQL
- 【函式】oracle視窗函式over()的理解函式Oracle
- Oracle如何刪除表中重複記錄Oracle
- 查詢刪除表中重複記錄
- SQL Server中row_number函式的常見用法SQLServer函式
- Oracle 中 Over() 函式學習總結Oracle函式
- Oracle 刪除表中重複記錄的DELETE SQLOracledeleteSQL
- Oracle刪重複記錄Oracle
- 【函式式 Swift】可選值函式Swift
- 在Delphi中巧用WINDOWS 的API函式 (轉)WindowsAPI函式
- OVER(PARTITION BY)函式用法函式
- Oracle over()函式使用Oracle函式
- 刪除重複id的記錄
- Oracle 使用分析函式刪除表中的重複行Oracle函式
- oracle的分析函式over 及開窗函式Oracle函式
- 高效快速刪除Oracle表中重複記錄Oracle
- db2中刪除重複記錄的問題DB2
- 【Analytic】分析函式之ROW_NUMBER函式函式
- javascript去掉陣列中重複的值JavaScript陣列
- 分析函式rank() row_number函式
- 刪除Oracle重複記錄Oracle