假設我有兩個具有相同結構的表,並且我想比較表中的數據。 如果對於一個特定的領域的數據是相同的,那麼我需要一個報告,將會說100%(匹配)否則我需要的數據在兩列不同的百分比。比較teradata表字段並返回字段匹配或不同的百分比
注意:需要對唯一密鑰進行連接。 (假設加入密鑰唯一且不爲空)
假設我有兩個具有相同結構的表,並且我想比較表中的數據。 如果對於一個特定的領域的數據是相同的,那麼我需要一個報告,將會說100%(匹配)否則我需要的數據在兩列不同的百分比。比較teradata表字段並返回字段匹配或不同的百分比
注意:需要對唯一密鑰進行連接。 (假設加入密鑰唯一且不爲空)
做兩個表的相交併將計數與表中任一個的記錄總數進行比較。要找出百分比,請比較匹配計數和總計數。
SELECT 'Matching', COUNT(*) FROM (
SELECT COLUMN_1 FROM TABLE_1
INTERSECT
SELECT COLUMN_1 FROM TABLE_2)
UNION ALL
SELECT 'Table_1', COUNT(*) FROM TABLE_1
UNION ALL
SELECT 'Table_2', COUNT(*) FROM TABLE_2
假設Table_1有20條記錄,Table_2有25條,並且有10個值匹配。做相交時你會得到10。
您也可以嘗試使用MINUS
而不是INTERSECT
來找出不匹配的記錄。
我已經假設兩個表Table1和Table2,我們使用Table1作爲參考表。 下面是查詢
SELECT
A.CNT as diff_number ,B.CNT as actual number
FROM
(SELECT COUNT(*) as cnt FROM
(SELECT * FROM TABLE1
MINUS
SELECT * FROM TABLE2) A1
UNION ALL
(SELECT * FROM TABLE2
MINUS
SELECT * FROM TABLE1) A2) A
CROSS JOIN
(SELECT COUNT(*) AS CNT1 FROM TABLE1) B
我相信下面就爲您提供的B1.Value
對於方差來A1.Value
當唯一的密鑰存在兩種表所示。我本來打算用COALESCE()
來寫這個,以解釋FULL OUTER JOIN
產生的丟失記錄,但是接下來我必須對該域進行假設,以及NULL
將使用哪些有效值。相反,如果存在缺失記錄,我選擇僅顯示NULL。
SELECT CASE WHEN A1.Value IS NULL OR B1.Value IS NULL
THEN NULL
WHEN A1.Value = B1.Value
THEN 1
ELSE ((A1.Value - B1.Value)/(A1.Value * 1.000)
END AS Variance
FROM TableA A1
FULL OUTER JOIN
TableB B1
ON A1.{UniqueKey} = B1.{UniqueKey};
注:爲了佔其中Value
字段沒有小數精度我1.00乘以它的情況。否則,將返回Variance
的結果而無小數精度。
一個簡單的WHERE
子句可以針對缺少的記錄,沒有方差的記錄或帶有方差的記錄。