簡體   English   中英

提取兩個表之間的差異-MS Access SQL查詢

[英]Extracting differences between two tables - MS Access SQL Query

我需要做的是顯示兩個表之間的所有差異。 TABLE1中存在但TABLE2中不存在的所有記錄,TABLE2中存在但TABLE1中不存在的記錄,以及另一個表中沒有匹配的Amount的記錄。

我有兩個表:

(TABLE 1)
CO_CODE   ACCOUNT_ID   CONTRACT    STATUS          AMT
A         7              101       ACTIVE          5,497.00
A         7              101       ACTIVE          5,482.00
A         15             106       INACTIVE        0.00
A         23             102       ACTIVE          4,562.00
A         31             102       ACTIVE          22.00
A         49             103       ACTIVE          1,900.00
A         49             103       ACTIVE          135.00

(TABLE 2)
Company      Account_Number    Amount      Agreement
A            7                 5,497.00    S000101
A            23                8,457.00    S000102
A            49                135.00      S000103          
A            56                2,465.00    S000104              
A            7                 5,482.00    S000101

這兩個表共享具有公司ID,帳號,金額和協議/合同號的字段,其中表2中的協議為文本類型,而表1中為數字類型。

到目前為止,我想出了:

SELECT TABLE1.CO_CODE AS Company, TABLE1.ACCOUNT_ID AS [Account Number], TABLE1.CONTRACT As [Contract Number], TABLE1.STATUS AS Status, TABLE1.AMT, TABLE2.Amount
FROM TABLE1 LEFT JOIN TABLE2 ON TABLE1.ACCOUNT_ID = TABLE2.Account_Number
WHERE ((Exists (SELECT * FROM TABLE2 WHERE TABLE1.CO_CODE = TABLE2.Company AND TABLE1.ACCOUNT_ID = TABLE2.Account_number AND TABLE1.CONTRACT = Clng(MID(TABLE2.Agreement,5)) AND TABLE1.AMT = TABLE2.Amount))=False) OR ((Exists (SELECT * FROM TABLE1 WHERE TABLE1.CO_CODE = TABLE2.Company AND TABLE1.ACCOUNT_ID = TABLE2.Account_number AND TABLE1.CONTRACT = Clng(MID(TABLE2.Agreement,5)) AND TABLE1.AMT = TABLE2.Amount))=False)

UNION ALL 

SELECT TABLE2.Company, TABLE2.Account_Number, CLng(MID(TABLE2.Agreement, 5)), TABLE1.ACC_STATUS, TABLE1.AMT, TABLE2.Amount
FROM TABLE2 LEFT JOIN TABLE1 ON TABLE1.ACCOUNT_ID = TABLE2.Account_Number 
WHERE TABLE1.ACCOUNT_ID NOT IN (SELECT Account_Number FROM TABLE2) OR TABLE2.Account_Number NOT IN (SELECT ACCOUNT_ID FROM TABLE1);

這給了我結果:

Company  Account    Contract    Status       AMT           Amount
A         15         106        INACTIVE     0.00   
A         23         102        ACTIVE       4,562.00      8,457.00
A         31         102        ACTIVE       22.00    
A         49         103        ACTIVE       1,900.00      135.00
A         56         104                                   2,465.00

金額為135.00的帳戶49不應顯示金額135.00,因為它在兩個表中都出現,但是1900.00的amt是正確的(僅出現在表1中)。

有人可以告訴我為什么會這樣以及如何解決嗎?

對於缺乏MS Access SQL和整個網站的知識,我深表歉意。 在過去的一周中,我一直在努力尋找如何獲得期望的結果,任何幫助將不勝感激。

免責聲明:我絕不是SQL方面的專家,因此我的解決方案可能效率不高甚至是錯誤的,但是它在我自己的測試環境中有效。

請嘗試以下操作:

SELECT T1.CO_CODE AS Company, T1.ACCOUNT_ID AS [Account Number], T1.STATUS AS Status,  T1.CONTRACT As [Contract Number], T1.AMT AS [Table 1], "" AS [Table 2]    
FROM TABLE1 T1
WHERE NOT EXISTS (
SELECT * FROM TABLE2 T2 
WHERE T1.CO_CODE = T2.Company 
AND T1.Account_ID = T2.Account_Number
AND T1.CONTRACT = CLng(MID(TABLE2.Agreement, 5))
AND T1.AMT = T2.Amount
)

UNION ALL

SELECT T2.Company, T2.Account_Number AS [Account Number], "" AS Status, CLng(MID(TABLE2.Agreement, 5)) AS [Contract Number],  "" AS [Table 1], T2.Amount AS [Table 2]    
FROM TABLE2 T2
WHERE NOT EXISTS (
SELECT * FROM TABLE1 T1 
WHERE T1.CO_CODE = T2.Company 
AND T1.Account_ID = T2.Account_Number
AND T1.CONTRACT = CLng(MID(TABLE2.Agreement, 5))    
AND T1.AMT = T2.Amount
)

結果如下:

-----------------------------------------------------------------
|Company|Account Number| Status |Contract Number|Table 1|Table 2|
-----------------------------------------------------------------
|   A   |      15      |INACTIVE|      106      | 0     |       |
|   A   |      23      | ACTIVE |      102      | 4562  |       |
|   A   |      31      | ACTIVE |      102      | 22    |       |
|   A   |      49      | ACTIVE |      103      | 1900  |       |
|   A   |      23      |        |      102      |       | 8457  |
|   A   |      56      |        |      104      |       | 2465  |
-----------------------------------------------------------------

我不知道您的每一列是什么類型,因此可能需要對查詢進行一些修改以匹配您的數據。 您可能還想將列重命名為其他名稱,我只是在輸入數據。

請注意,每個表中有兩個不同金額的記錄顯示了兩次(即,示例中的帳戶#23)。 我不知道這對您來說是否可以接受,但這是我想出的。

我希望這會有所幫助,或者至少會為您提供其他嘗試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM