2014-07-15 61 views
1
過濾

我的要求是,以驗證是否全部或Column2(由Column1組)的總和應使用MS Access等於Column3(組由Column1)。列出所有記錄時,結果被的GroupBy

例如, 合計DebitAmount(組AccountNumber)應該等於BillAmount(對於相同的帳號)。即,總DebitAmount(或SUM(DebitAmount)),用於賬戶號碼= '129610896' 應等於30000

同樣的DebitAmount合計(或SUM(DebitAmount)),用於賬戶號碼= '184046309' 應等於19000

AccountNumber Code DebitAmount BillAmount 
129610896  B2B001 25000 30000 
129610896  B2B032 5000 30000 
184046309  B2B001 15830 19000 
184046309  B2B032 3170 19000 

我寫了一個查詢如下

SELECT AccountNumber, BillAmount, iif ((Sum(DebitAmount) - BillAmount) = 0,1,0) as IsVerify 
FROM Master_Table GROUP BY AccountNumber,BillAmount 

AccountNumber BillAmount IsVerify 
129610896  30000  1 
184046309  19000  1 

結果只顯示記錄組按帳號。如果我有50條記錄,則按照帳號分組顯示只有20條記錄。

但我想要顯示所有記錄,如果借方金額等於帳單金額,IsVerify列應顯示值'1'。如果我在查詢中包含「代碼」列,它將顯示所有記錄,但顯示的結果無效。

SELECT Code,AccountNumber, BillAmount, iif ((Sum(DebitAmount) - BillAmount) = 0,1,0) as IsVerify FROM Master_Table GROUP BY Code,AccountNumber,BillAmount 

那麼我怎麼能寫查詢來顯示所有的記錄顯示驗證標誌如下所示。

AccountNumber GLCode DebitAmount BillAmount IsVerify 
129610896  GLB2B001 25000 30000  1 
129610896  GLB2B032 5000 30000  1 
184046309  GLB2B001 15830 19000  1 
184046309  GLB2B032 3170 19000  1 

表格顯示不正確。所以,請參閱鏈接 http://answers.microsoft.com/en-us/office/forum/office_2013_release-access/list-out-all-the-records-when-the-results-are/c217b32a-b869-46ce-bb88-a0f98f21708f?tm=1405351469299

回答

0
SELECT tm.*, 
    IIF(
     (
      SELECT Sum(t.DebitAmount) 
      FROM Master_Table t 
      WHERE t.AccountNumber = tm.AccountNumber 
     ) = tm.BillAmount, 1, 0 
    ) 
    as IsVerify 
FROM Master_Table tm 

原諒我,如果因爲我在MySQL和T-SQL的工作也有一些小錯誤。但邏輯是正確的。

+0

大家好, 非常感謝您的回答。不幸的是它不起作用。 但我已經從 簡化查詢作爲 IIF(賬戶號碼未在 (選擇賬戶號碼(選擇賬戶號碼,IIF(((CDBL((薩姆(DebitAmount) - CDBL(BillAmount))= 0),1,0 )AS IsVerify FROM MASTER_Table GROUP BY AccountNumber,BillAmount)其中IsVerify = 0),1,0)as ANumber_SumBillAmountCheck 它工作正常:) 致以問候 Basha –

0

你快到了! :)試試這個:

SELECT  mt.AccountNumber, mt.GLCode, mt.DebitAmount, mt.BillAmount, IIf(t1.SumOfDebitAmount - mt.BillAmount = 0,1,0) AS IsVerify 
FROM  Master_Table AS mt INNER JOIN 
      (SELECT AccountNumber, Sum(DebitAmount) AS SumOfDebitAmount 
      FROM Master_Table 
      GROUP BY AccountNumber) AS t1 
      ON mt.AccountNumber = t1.AccountNumber 
ORDER BY mt.AccountNumber, mt.GLCode; 

我們得到一個派生表內的DebitAmount總數,然後在賬號註冊。如果DebitAmount減去BillAmount的總數爲0,則表示DebitAmount的行被驗證。請注意有一個問題與聲明:

IIf(t1.SumOfDebitAmount = mt.BillAmount,1,0) 

它一直顯示#錯誤。不知道爲什麼,真的,但我不能這樣做。無論如何,這應該適合你。