繁体   English   中英

转换要在MS Access中使用的SQL Server查询

[英]Convert SQL Server query to be used in MS Access

我在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和tblKPIData.ImportTimestamp = max_kpi.importtimestamp和tblKPIData.FinancialMonth = max_kpi.FinancialMonth等的函数使用的参数数量错误

谁能告诉我这是怎么回事? 我真的不知道

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

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

就像Gordon Linoff所说的,如果要将Null替换为0 ,则需要使用Nz

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM