MS Access 将我的 column/alias 视为参数......但只是有时

MS Access treats my column/alias as a parameter... But only sometimes

SQL 的新手,但我很确定我的查询是正确的。我已经尝试了一千种不同的方式,但有时它仍然会将我的 column/alias lead_ID_t 视为参数。我将所有内容都放在方括号中以尝试提供帮助,但无济于事...

我正在 notepad++ 中编辑查询,当我将其粘贴到 Access 中时,运行就没问题了。然后我保存并关闭查询。当我再次尝试 运行 时,它会将 lead_ID_t 视为参数并且我的格式完全消失了......任何人都可以解释发生了什么吗?

SELECT [Total].[lead_ID_t] AS [Lead ID], 

IIF(isnull([Total].[lead_count_t]-[F9].[lead_count_f]),0,[Total].[lead_count_t]-[F9].[lead_count_f]) AS [V Calls]

FROM (SELECT DISTINCT [Lead_ID] AS [lead_ID_t], Count([Lead_ID]) AS [lead_count_t] 

FROM (SELECT * FROM [Logs] WHERE [log_actor] <> "Five9 Dialer") As [TData] GROUP BY [Lead_ID])  AS [Total] 

LEFT JOIN (SELECT DISTINCT [Lead_ID] AS [Lead_ID_f], count([Lead_ID]) AS [lead_count_f] 

FROM (SELECT * FROM [Logs] WHERE [log_actor] = "Five9 Dialer") As [FData] GROUP BY [Lead_ID])  AS [F9] ON [Total].[lead_ID_t]=[F9].[lead_ID_f];

ps。使用和不使用 iif 语句

都会出现相同的错误

考虑调整后的紧凑查询:

  1. 删除多余的嵌套级别,因为您可以在聚合 GROUP BY 查询中使用 WHERE

  2. 删除 DISTINCT,因为聚合查询已经 return 个不同的分组值。

  3. IIF()NULL 的 return 为零的声明)替换为 NZ()

  4. 虽然 Total 可能不是列出的 MS Access 或 JET 保留字,但它可能是 GUI 应用程序保留字,因此会导致问题。使用以前的子查询别名,TDataFData.

  5. 或者,对一个没有子查询或连接的主查询使用条件聚合,并且您可以在其中使用计算列来避免重复。

压缩查询

SELECT [TData].[lead_ID_t] AS [Lead ID],
       NZ(([TData].[lead_count_t] - [FData].[lead_count_f]),0) AS [V Calls]
FROM
  (SELECT [Lead_ID] AS [lead_ID_t],
          COUNT([Lead_ID]) AS [lead_count_t]
   FROM [Logs]
   WHERE [log_actor] <> 'Five9 Dialer'
   GROUP BY [Lead_ID]) AS [TData]

LEFT JOIN    
  (SELECT [Lead_ID] AS [Lead_ID_f],
          COUNT([Lead_ID]) AS [lead_count_f]
   FROM [Logs]
   WHERE [log_actor] = 'Five9 Dialer' 
   GROUP BY [Lead_ID]) AS [FData]

ON [TData].[lead_ID_t] = [FData].[lead_ID_f];

条件聚合

SELECT l.[Lead ID],
       SUM(IIF(l.[log_actor] <> 'Five9 Dialer', 1, 0)) AS [lead_count_t],
       SUM(IIF(l.[log_actor] = 'Five9 Dialer', 1, 0)) AS [lead_count_f],
       NZ(([lead_count_t] - [lead_count_f]),0) AS [V Calls]
FROM [Logs] l
GROUP BY l.[Lead_ID]