2014-02-07 26 views
0

我在嘗試比較兩個庫存清單;當前月份與上個月。這些數據分佈在兩個獨立的表格中。在MS Access中比較兩個數據庫:這是可行的嗎?

這兩個模式略有不同,一個文件使用double作爲數值,而另一個使用decimal

我想比較哪些新ItemID與前一個月的數據相比較,以及價值變化。

在Access中是這樣的可能性,還是我更適合將數據導入MS SQL Server?

此外,這種比較可以完成查詢,還是我需要編寫一些VBA?

+0

我可能會看看這個自我外部聯接。 –

+0

表格目前採用ACCDB格式,但如果需要,我可以轉換並上傳到新的MS SQL Server數據庫。由於系統資源限制,如果比較在Access中不可行,我只想考慮這一點。另外,據我所知,SQL Server是一個更高效的數據庫引擎。 – toolshed

回答

0

我會做這樣的事情:

SELECT 
    t1.*, 
    t2.* 
FROM Table1 t1 
FULL OUTER JOIN Table2 t2 ON t2.Id = t1.Id 
WHERE 1=1 
AND t1.Field1 <> t2.Field1 
AND t1.Field2 <> t2.Field2 
etc. 

這將讓你的原始數據。然後你可以添加到WHERE過濾NULLS或其他任何東西。缺少左側表格中的條目將表示已添加的東西。缺少右表(t2)的條目將顯示刪除的內容。

我不知道,如果全外連接在MSACCESS也有,但他們應該是在查詢設計器:http://www.databasejournal.com/features/msaccess/article.php/3516561/Implementing-the-Equivalent-of-a-FULL-OUTER-JOIN-in-Microsoft-Access.htm

+0

我對此感到抱歉。這兩個列表存在於單獨的表格中,而不是單個表格。 – toolshed

+0

只要含義相同,您仍然應該能夠匹配相似的列,並過濾。 –

1

MS Access是挺開心的比較小數和雙

SELECT "In 1" As Diff, Invent1.ID, Invent1.Amount, Invent2.Amount 
FROM Invent1 LEFT JOIN Invent2 ON Invent1.ID = Invent2.ID 
WHERE Invent2.ID Is Null 

UNION 
SELECT "In 2" As Diff, Invent2.ID, Invent1.Amount, Invent2.Amount 
FROM Invent2 LEFT JOIN Invent1 ON Invent2.ID = Invent1.ID 
WHERE Invent1.ID Is Null 

UNION 
SELECT "Amount" As Diff, Invent1.ID, Invent1.Amount, Invent2.Amount 
FROM Invent1 INNER JOIN Invent2 ON Invent1.ID = Invent2.ID 
WHERE [Invent1].[Amount]<>[Invent2].[Amount] 

你可能想改變最後的工會,取決於您的數據:

SELECT "Amount" As Diff, Invent1.ID, Invent1.Amount, Invent2.Amount 
FROM Invent1 INNER JOIN Invent2 ON Invent1.ID = Invent2.ID 
WHERE CCur([Invent1].[Amount])<>CCur([Invent2].[Amount]) 

或者更好:

UNION SELECT "Amount" As Diff, Invent1.ID, Invent1.Amount, Invent2.Amount 
FROM Invent1 INNER JOIN Invent2 ON Invent1.ID = Invent2.ID 
WHERE CCur(Nz([Invent1].[Amount],0))<>CCur(Nz([Invent2].[Amount],0));