【问题标题】:SQL RANK() equivalent for VBA ADODB.Recordset等效于 VBA ADODB.Recordset 的 SQL RANK()
【发布时间】:2014-05-12 16:53:15
【问题描述】:

我正在尝试在 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() 函数。

谢谢!

【问题讨论】:

  • 问题不在于 ADODB 记录集。这是您正在与之交谈的数据引擎。如果您从中读取的数据库支持,Recordset 很乐意向您展示这些结果。您可以在连接到 Sql Server 而不是 Excel 时使用这个确切的代码。

标签: sql excel vba ado


【解决方案1】:

您的 ADODB 连接提供程序是什么?

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

去看看这个问题Grouped Ranking in Access 看看如何通过访问来进行排名

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多