【问题标题】:Convert SQL Server query to be used in MS Access转换 SQL Server 查询以在 MS Access 中使用
【发布时间】:2017-10-08 13:01:51
【问题描述】:

我在 T-SQL 中有一个工作查询,但需要在 MS Access 中转换(并使用它)。当我尝试运行此程序时出现错误:

SELECT 
    tblKPIData.id, tblKPIData.KPI_id,
    tblKPI.KPI_Name,
    tblKPIData.ImportTimestamp, tblKPIData.Quantity,
    tblKPIData.FinancialMonth, tblKPIData.FinancialYear,
    tblKPIData.Zone_id, tblZone.ZoneName,
    tblKPIData.DMA_id, tblDMA.DMA_Name,
    tblKPIData.TargetOrResult
FROM 
    ((((tblKPIData
INNER JOIN 
    tblKPI ON tblKPI.Id = tblKPIData.KPI_id)
LEFT JOIN 
    tblDMA ON tblDMA.Id = tblKPIData.DMA_id)
LEFT JOIN 
    tblZone ON tblZone.ID = tblKPIData.Zone_id)
INNER JOIN 
    tblDashboardKPI ON tblDashboardKPI.KPI_Id = tblKPIData.KPI_id)
INNER JOIN
    (SELECT 
         a.kpi_id, a.financialMonth, a.financialYear,
         ISNULL(a.zone_id, 0) AS zone_id,
         ISNULL(a.dma_id, 0) AS dma_id,
         a.targetorresult,
         MAX(a.importtimestamp) AS importtimestamp
     FROM
         tblKPIData a
     GROUP BY 
         kpi_id, financialMonth, financialYear,
         zone_id, dma_id, targetorresult) AS max_kpi ON (tblKPIData.KPI_id = max_kpi.KPI_id
                                                     AND tblKPIData.ImportTimestamp = max_kpi.importtimestamp
                                                     AND tblKPIData.FinancialMonth = max_kpi.FinancialMonth
                                                     AND tblKPIData.FinancialYear = max_kpi.FinancialYear
                                                     AND ISNULL(tblKPIData.Zone_id, 0) = ISNULL(max_kpi.zone_id, 0)
                                                     AND ISNULL(tblKPIData.DMA_id, 0) = ISNULL(max_kpi.dma_id, 0)
                                                     AND tblKPIData.TargetOrResult = max_kpi.TargetOrResult)
WHERE 
    tblKPIData.FinancialMonth = 'Oct'
    AND tblKPIData.FinancialYear = 2017
    AND tblKPIData.KPI_id IN (SELECT kpi_id FROM tblDashboardKPI WHERE tblDashboardKPI.KPI_Id = tblKPIData.KPI_id)
    AND (tblKPIData.Zone_id = 5 OR tblKPIData.DMA_id IN (SELECT id FROM tblDMA WHERE Zoneid = 5))
    AND ((tblDashboardKPI.Status) = True)
    AND ((tblDashboardKPI.Dashboard_Id) = 6)

我得到这个错误:

查询表达式中函数使用的参数数量错误 'tblKPIData.KPI_Id = max_kpi.KPI_id and tblKPIData.ImportTimestamp = max_kpi.importtimestamp and tblKPIData.FinancialMonth = max_kpi.FinancialMonth and ... etc

谁能告诉我有什么问题?我真的不知道。。

【问题讨论】:

标签: sql sql-server ms-access


【解决方案1】:

ISNULL(Field) 是有效的 Access SQL,但返回与 Field Is Null 相同的内容(如果字段为 Null,则返回布尔值 True,如果不是,则返回 False)。

ISNULL(Field, 0) 是无效的 Access SQL,因为 ISNULL 只接受一个参数(因此错误的参数数量错误)。

就像 Gordon Linoff 所说,如果你想用 0 替换 Null,你会想要使用 Nz

只需找到所有ISNULL 并将其替换为NZ

【讨论】:

  • 如果有效,请将答案标记为已接受。您可以阅读here 接受答案的工作原理,以及优点是什么。
猜你喜欢
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
相关资源
最近更新 更多