[英]Moving VBA function to SQL Server stored procedure
我在MS Access中運行了一些VBA代碼,我想將其“放大”到存儲過程。 它現在使用ADO來生成排名(荷蘭的PLAATS),但是我必須在SQL Server上進行此項工作。 誰能幫忙?
VBA中的代碼是:
Function InvullenUitslag()
Dim MijnDb As Database
Dim rsWEDS As Recordset
Dim iCategorie As Integer
Dim iPlaats As Integer
Dim iExequo As Integer
Dim dblTotaal As Double
Dim iAantalDeelnemers As Byte
Set MijnDb = DBEngine.Workspaces(0).Databases(0)
Set rsWEDS = MijnDb.OpenRecordset("Q_UITSLAG")
rsWEDS.MoveFirst
If Not rsWEDS.EOF Then
iCategorie = rsWEDS![CATEGORIEID]
dblTotaal = -1
iPlaats = 0
iExequo = 0
iAantalDeelnemers = 0
End If
While Not rsWEDS.EOF()
If Not (iCategorie = rsWEDS![CATEGORIEID]) Then
iPlaats = 1
iExequo = 0
iAantalDeelnemers = 1
Else
If Abs(dblTotaal - rsWEDS![iTOTAAL]) <= 0.0001 Then
iExequo = iExequo + 1
iAantalDeelnemers = iAantalDeelnemers + 1
Else
iPlaats = iPlaats + iExequo + 1
iExequo = 0
iAantalDeelnemers = iAantalDeelnemers + 1
End If
End If
rsWEDS.Edit
rsWEDS![PLAATS] = iPlaats
rsWEDS![AANTALDEELNEMERS] = iAantalDeelnemers
If iExequo > 0 Then
rsWEDS![EXEQUO] = "*"
End If
rsWEDS.Update
iCategorie = rsWEDS![CATEGORIEID]
dblTotaal = rsWEDS![iTOTAAL]
rsWEDS.MoveNext
Wend
End Function
如果我理解正確,則需要基於總得分和划分(划分)級別對參與者進行排名。
我認為您需要使用帶有PARTITION BY子句的RANK()。 您的結果將如下所示:
declare @table table (
Name nvarchar(50)
,[Level] nvarchar(1)
,ResultApparatus1 decimal(12,1)
,ResultApparatus2 decimal(12,1)
,TotalScore decimal(12,1)
)
insert into @table values ('Jimm','A',8.0,9.0,17.0)
insert into @table values ('Jack','A',7.2,8.4,15.6)
insert into @table values ('John','B',8.2,7.6,15.6)
insert into @table values ('Frank','B',8.2,7.6,15.6)
insert into @table values ('Mark','B',8.2,7.8,15.8)
select
*
,RANK() OVER (PARTITION BY [Level] ORDER BY [Level], TotalScore DESC) Position
from
@table
這將返回以下結果集:
Name Level ResultApparatus1 ResultApparatus2 TotalScore Position
Jimm A 8.0 9.0 17.0 1
Jack A 7.2 8.4 15.6 2
Mark B 8.2 7.8 15.8 1
John B 8.2 7.6 15.6 2
Frank B 8.2 7.6 15.6 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.