2014-10-17 24 views
1

我有兩個接近相同的數據庫(第二個是第一個副本,然後使用不同的公司/產品信息進行了修改)。有一個老化的報告,從來沒有正確的工作,我必須解決。我在一個數據庫(A)上工作,但第二個(B)啓動了「無效」錯誤。「訪問查詢中無效的空使用」

報表查詢是從另一個查詢生成的,該查詢基本上抓取訂單信息和客戶信息。從那裏開始,有問題的查詢將訂單分成塊,具體取決於它們發貨之前多長時間,然後返回餘額。錯誤消息彈出以下代碼段:

Round(Sum(IIf((Date()-[ShipDate] Is Null),[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS Current_Unshipped 

如果Is Null更改爲其他任何值,則查詢正常執行。如果我嘗試引入任何「如果變量爲空」代碼,則會引發錯誤。我嘗試了以下,但無濟於事。

Round(Sum(IIf((nz[ShipDate]),[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS Current_Unshipped 

我有另一列,如果shipdate爲null,這會令人驚訝的工作,返回「NULL」。第一個代碼段在其他數據庫中完美地工作,所以我很困惑。我需要能夠爲未發貨的訂單生成一個列,因此缺少[ShipDate]。我很遺憾,爲什麼代碼不起作用。

代碼的整個

(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)) 

段是如何產生的平衡,它的工作原理。它也在數據庫中的大約一百萬個地方實現 - 設計者認爲每次查詢運行時都會自動生成總餘額,而不是將其存儲在某個地方。

整個查詢代碼也在下面發佈。如果任何人都能指引我走向正確的方向,那將非常有幫助。

SELECT DISTINCTROW 
    Round(Sum(IIf((Date()-[ShipDate]<31),[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS [Current], 
    Round(Sum(IIf((Date()-[ShipDate] Is Null),[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS Current_Unshipped, 
    Round(Sum(IIf((Date()-[ShipDate])<61 And (Date()-[ShipDate]>30),[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS [31-60 Days], 
    Round(Sum(IIf((Date()-[ShipDate])<91 And (Date()-[ShipDate]>60),[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS [61-90 Days], 
    Round(Sum(IIf((Date()-[ShipDate])>90,[LineTotal]+(CLng([LineTotal]*[SalesTaxRate]*100)/100)+[FreightCharge]-nz([Total Payments]),0)),2) AS [91+ Days], 
    Round(Sum(nz([LineTotal])+(CLng(nz([LineTotal])*nz([SalesTaxRate])*100)/100)+nz([FreightCharge])-nz([Total Payments])),2) AS Balance, 
    [Receivables Aging Report Query].CompanyName, 
    [Receivables Aging Report Query].OrderDate, 
    [Receivables Aging Report Query].ShipDate, 
    [Receivables Aging Report Query].OrderID, 
    nz((Round(Date()-[ShipDate])),"NULL") AS Span, 
FROM [Receivables Aging Report Query] 
GROUP BY 
    [Receivables Aging Report Query].CompanyName, 
    [Receivables Aging Report Query].OrderDate, 
    [Receivables Aging Report Query].ShipDate, 
    [Receivables Aging Report Query].OrderID 
HAVING(((Round(Sum(nz([LineTotal])+(CLng(nz([LineTotal])*nz([SalesTaxRate])*100)/100)+nz([FreightCharge])-nz([Total Payments])),2))>0 Or (Round(Sum(nz([LineTotal])+(CLng(nz([LineTotal])*nz([SalesTaxRate])*100)/100)+nz([FreightCharge])-nz([Total Payments])),2))<0) AND (([Receivables Aging Report Query].ShipDate) Is Not Null)) OR (((Round(Sum(nz([LineTotal])+(CLng(nz([LineTotal])*nz([SalesTaxRate])*100)/100)+nz([FreightCharge])-nz([Total Payments])),2))>0 Or (Round(Sum(nz([LineTotal])+(CLng(nz([LineTotal])*nz([SalesTaxRate])*100)/100)+nz([FreightCharge])-nz([Total Payments])),2))<0) AND (([Receivables Aging Report Query].ShipDate) Is Null)) 
ORDER BY 
    [Receivables Aging Report Query].OrderID; 

回答

0

使用此:

Round(Sum(IIf(DateDiff("d",Date(),[ShipDate])=0,[LineTotal]+CLng([LineTotal]*[SalesTaxRate]*100)/100+[FreightCharge]-Nz([Total Payments],0),0)),2) AS Current_Unshipped 
+0

哈。我忘記了我發佈了這個尋求幫助。這個問題最終導致數據庫中存在空值,因此失敗了。 我最終生成了一個查詢,該查詢挑選了數據庫中最常見的字段,並且如果存在空值,則返回-1。 – 2016-03-28 15:05:34