2017-10-08 63 views
0

我在T-SQL中有一個工作查詢,但需要在MS Access中進行轉換(並使用它)。我得到一個錯誤,當我嘗試運行此:轉換MS Access中使用的SQL Server查詢

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) 

我得到這個錯誤:

Wrong number of arguments used with function in query expression 'tblKPIData.KPI_Id = max_kpi.KPI_id and tblKPIData.ImportTimestamp = max_kpi.importtimestamp and tblKPIData.FinancialMonth = max_kpi.FinancialMonth and ... etc

誰能告訴我什麼是錯?我真的不知道..

+1

我覺得MS Access使用'NZ()'而不是'ISNULL()'。 –

+0

請參閱https://support.office.com/en-us/article/Queries-93fb69b7-cfc1-4f3e-ab56-b0a01523bb50#ID0EAABAAA=SQL_syntax –

回答

3

ISNULL(Field)有效訪問SQL,但返回同樣的事情Field Is Null(如果該字段是Null一個布爾TrueFalse如果不是)。

ISNULL(Field, 0)無效訪問SQL,因爲ISNULL只接受一個參數(因此參數錯誤數量錯誤)。

像Gordon Linoff說的那樣,如果您想用0替換Null,您將需要使用Nz

只是查找和替換所有ISNULLNZ

+0

Thanx,工作。 – Judith

+0

如果有效,請將答案標記爲已接受。你可以閱讀[這裏](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)如何接受答案的作品,以及優點是什麼。 –