SQL RANK() equivalent for VBA ADODB.Recordset

2019-08-04 12:06发布

I'm trying to write an SQL query in VBA for an ADODB.Recordset object that generates a calculated rank field. Using transact-SQL does not work as seen in the sample here.

strSQL = "SELECT DISTINCT [MONTH-YYYY], Location, (SUM([O/T Earnings])/SUM([Monthly Earnings])) AS OT_AS_PCT "
strSQL = strSQL & "RANK() OVER (PARTITION BY [MONTH-YYYY] ORDER BY (SUM([O/T Earnings])/SUM([Monthly Earnings])) DESC) AS RANK "
strSQL = strSQL & "FROM [Overtime Data$] "
strSQL = strSQL & "GROUP BY [MONTH-YYYY], Location "

rst_ranks.Open strSQL, cnn, adOpenStatic, adLockReadOnly

I've noticed when using functions in ADODB before that SQL functions do not work and VBA functions must be used in their place. Is there a VBA Rank() function that allows the PARTITION BY parameter.

Thanks!

标签: sql excel vba ado
2条回答
做个烂人
2楼-- · 2019-08-04 12:16

What's your ADODB Connection provider ?

If you're trying to use Rank() against an Access database it wont work.

Go and see this question Grouped Ranking in Access to see how to do rank with access

查看更多
男人必须洒脱
3楼-- · 2019-08-04 12:18

strangely, standard SQL functions such as RANK() or BETWEEN() do not work in VBA/ADODB record strings. Instead, use of existing VBA functions are necessary and work the same.

查看更多
登录 后发表回答