【问题标题】:Method 'Open' of object'_Recordset' failed in SQLSQL 中对象“_Recordset”的方法“打开”失败
【发布时间】:2021-03-31 13:27:12
【问题描述】:

我希望创建一个 SQL 查询,该查询将返回案例管理器、活动总数和以“拨出呼叫”开头的描述计数。

目前,我运行它并收到一条错误消息,指出方法 'Open' of object'_Recordset' 失败。我确定这是因为“拨出电话”,因为当我删除它时它工作正常。

任何人都知道为什么会失败,或者知道计算以拨出电话开头的描述数量的任何替代方法吗?请记住,Case 方法不适用于 VBA。

SELECT m.CaseManager, 
SUM(m.Lead) AS 'Total Leads', 
COUNT(a.Description) AS 'Total Activity', 
COUNT(IF a.Description LIKE 'Outgoing Calls%' THEN 1 ENDIF) AS 'Outbound Calls' 
FROM AccountTable m INNER JOIN ActivityTable a 
ON m.AccountNumber=a.AccountNumber 
GROUP BY m.CaseManager;

【问题讨论】:

  • 尝试直接在 Access 中而不是从 VBA 代码中执行查询:您可能会收到更有意义的错误消息。由于 SQL 中的语法错误,无法打开记录集; SQL 编辑器应该提供更好的线索来判断它有什么问题。

标签: sql vba ms-access


【解决方案1】:

(1) 声明 if IIF,而不是 IF (2) IIF 语句需要ELSE-branch

暂时无法测试,但语句应该是这样的

SUM(IIF(a.Description LIKE 'Outgoing Calls*', 1, 0)) AS 'Outbound Calls' 

https://support.microsoft.com/en-us/office/iif-function-32436ecf-c629-48a3-9900-647539c764e3

【讨论】:

  • 谢谢 - 我很遗憾在添加此内容时看到与上述相同的错误消息。
  • @DannyO'Sullivan 试试IIF(a.Description LIKE 'Outgoing Calls%',1,0)IIF 是一个接受参数的函数,而不是一个语句。你混淆了IIF 函数和SELECT CASE 语句; CASE WHEN a.Description LIKE 'Outgoing Calls%' THEN 1 ELSE 0 END 也应该可以工作(注意:我不知道 Access-SQL)。
  • 抱歉,搞混了。更新了我的答案
  • 谢谢大家。奇怪的是,上面的查询返回活动的总数,而不仅仅是传出调用。所以基本上 IIF 语句返回与 COUNT(a.Description) 相同的结果。 (而且我可以确认它不应该是相同的计数。
  • 您需要使用SUM 而不是COUNT。 COUNT 计算查询的命中数。 Access-SQL 中的通配符是*,而不是'%'。再次更新我的答案,希望它现在是正确的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 2011-06-24
相关资源
最近更新 更多