我在嘗試比較兩個庫存清單;當前月份與上個月。這些數據分佈在兩個獨立的表格中。在MS Access中比較兩個數據庫:這是可行的嗎?
這兩個模式略有不同,一個文件使用double
作爲數值,而另一個使用decimal
。
我想比較哪些新ItemID與前一個月的數據相比較,以及價值變化。
在Access中是這樣的可能性,還是我更適合將數據導入MS SQL Server?
此外,這種比較可以完成查詢,還是我需要編寫一些VBA?
我在嘗試比較兩個庫存清單;當前月份與上個月。這些數據分佈在兩個獨立的表格中。在MS Access中比較兩個數據庫:這是可行的嗎?
這兩個模式略有不同,一個文件使用double
作爲數值,而另一個使用decimal
。
我想比較哪些新ItemID與前一個月的數據相比較,以及價值變化。
在Access中是這樣的可能性,還是我更適合將數據導入MS SQL Server?
此外,這種比較可以完成查詢,還是我需要編寫一些VBA?
我會做這樣的事情:
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
我對此感到抱歉。這兩個列表存在於單獨的表格中,而不是單個表格。 – toolshed
只要含義相同,您仍然應該能夠匹配相似的列,並過濾。 –
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));
我可能會看看這個自我外部聯接。 –
表格目前採用ACCDB格式,但如果需要,我可以轉換並上傳到新的MS SQL Server數據庫。由於系統資源限制,如果比較在Access中不可行,我只想考慮這一點。另外,據我所知,SQL Server是一個更高效的數據庫引擎。 – toolshed