Access SQL和代碼實現連續(xù)及不連續(xù)Rank排名
- 2019-12-22 08:00:00
- Alexywt 轉貼
- 5404
在Excel中我們可以使用Rank函數對數據進行排名操作。
而Access是沒有Rank函數的,所以不能直接用此函數排名操作。
下面介紹使用VBA代碼和建立SQL查詢來完成排序操作。
一、排名的種類跟算法
1、非連續(xù)排名
邏輯算法:對于一組數列里的某個數字而言,其非連續(xù)排名是指:在該組數列里比該數字大的所有數字的個數+1
2、連續(xù)排名
邏輯算法:對于一組數列里的某個數字而言,其連續(xù)排名是指:在該組數列里比該數字大的所有非重復數字的個數+1
二、不同的實現方式
如下圖所示分別為表的結構及部分初始數據:
1、VBA實現方式
我寫了一個Sub過程RankField,該過程的參數說明如下:
TableRanked:需排名的表名
FieldRanked:數據所在字段的字段名
FieldResult:排名后結果存儲的字段名
NormalRank:是否是常規(guī)排名(True是常規(guī)排名,非連續(xù)排名,Excel中的Rank函數即為非連續(xù)排名;False為連續(xù)排名)
Sub RankField(TableRanked As String, FieldRanked As String, FieldResult As String, NormalRank As Boolean) Dim rs As New ADODB.Recordset Dim rs1 As New ADODB.Recordset rs.Open "Select " & FieldRanked & "," & FieldResult & " From " & TableRanked, CurrentProject.Connection, adOpenDynamic, adLockOptimistic Do Until rs.EOF If NormalRank Then rs1.Open "Select Count(*)+1 as CountNum From " & TableRanked & " Where " & FieldRanked & ">" & rs.Fields(FieldRanked).Value, _ CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly Else rs1.Open "Select Count(*) as CountNum From (Select Distinct " & FieldRanked & " From " & TableRanked & " Where " & FieldRanked & ">=" & rs.Fields(FieldRanked).Value & ")", _ CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly End If rs.Fields(FieldResult).Value = rs1!CountNum.Value rs1.Close rs.MoveNext Loop rs.Close End Sub
按下Ctrl+G,切換到立即窗口,分別輸入如下類似的代碼:
1 RankField "Score","Score","Rank1_VBA",true 2 RankField "Score","Score","Rank2_VBA",False
我們會得到如下類似的結果,Rank1_VBA列為非連續(xù)排名結果,Rank2_VBA為連續(xù)排名結果:
2、SQL查詢實現方式
相比于VBA代碼方式,在成績值發(fā)生修改時,SQL查詢可以自動更新排名數據,而不需要像VBA過程要每次都手動重新運算.
SELECT Score.id, Score.Score, Score.Rank1_VBA, Score.Rank2_VBA, (Select Count(*)+1 From score AS Score_1 Where Score_1.Score>Score.Score) AS Rank1, (Select Count(*)+1 From (Select Distinct Score_1.score From score AS Score_1) As tbl Where tbl.Score>Score.Score) AS Rank2 FROM Score;
創(chuàng)建這個查詢后,會活的如下所示的運行結果:Rank1與Rank1_VBA對應,Rank2與Rank2_VBA對應.
分享
Access數據庫自身
- office課程播放地址及課程明細
- Excel Word PPT Access VBA等Office技巧學習平臺
- 將( .accdb) 文件格式數據庫轉換為早期版本(.mdb)的文件格式
- 將早期的數據庫文件格式(.mdb)轉換為 (.accdb) 文件格式
- KB5002984:配置 Jet Red Database Engine 數據庫引擎和訪問連接引擎以阻止對遠程數據庫的訪問(remote table)
- Access 365 /Access 2019 數據庫中哪些函數功能和屬性被沙箱模式阻止(如未啟動宏時)
- Access Runtime(運行時)最全的下載(2007 2010 2013 2016 2019 Access 365)
Access Activex第三方控件
- Activex控件或Dll 在某些電腦無法正常注冊的解決辦法(regsvr32注冊時卡住)
- office使用部分控件時提示“您沒有使用該ActiveX控件許可的問題”的解決方法
- RTF文件(富文本格式)的一些解析
- Access樹控件(treeview) 64位Office下出現橫向滾動條不會自動定位的解決辦法
- Access中國樹控件 在win10電腦 節(jié)點行間距太小的解決辦法
- EXCEL 2019 64位版(Office 2019 64位)早就支持64位Treeview 樹控件 ListView列表等64位MSCOMMCTL.OCX控件下載
- VBA或VB6調用WebService(直接Post方式)并解析返回的XML
Access ADP Sql Server等
- 早期PB程序連接Sqlserver出現錯誤
- MMC 不能打開文件C:/Program Files/Microsoft SQL Server/80/Tools/Binn/SQL Server Enterprise Manager.MSC 可能是由于文件不存在,不是一個MMC控制臺,或者用后來的MMC版
- sql server連接不了的解決辦法
- localhost與127.0.0.1區(qū)別
- Roych的淺談數據庫開發(fā)系列(Sql Server)
- sqlserver 自動備份對備份目錄沒有存取權限的解決辦法
- 安裝Sql server 2005 express 和SQLServer2005 Express版企業(yè)管理器 SQLServer2005_SSMSEE
文章分類
聯(lián)系我們
聯(lián)系人: | 王先生 |
---|---|
Email: | 18449932@qq.com |
QQ: | 18449932 |
微博: | officecn01 |