SQL RANK()等效于VBA ADODB.Recordset

时间:2014-05-12 16:53:15

标签: sql excel vba ado

我正在尝试在VBA中为生成计算排名字段的ADODB.Recordset对象编写SQL查询。使用transact-SQL不起作用,如此处的示例所示。

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

我注意到在使用ADODB中的函数之前,SQL函数不起作用,并且必须在它们的位置使用VBA函数。是否有允许PARTITION BY参数的VBA Rank()函数。

谢谢!

2 个答案:

答案 0 :(得分:0)

你的ADODB连接提供商是什么?

如果您尝试对Access数据库使用Rank(),它将无法正常工作。

转到此问题Grouped Ranking in Access,查看如何使用访问权限排名

答案 1 :(得分:0)

奇怪的是,标准SQL函数(如RANK()或BETWEEN()在VBA / ADODB记录字符串中不起作用。相反,使用现有的VBA功能是必要的,并且工作原理相同。