2014-03-19 108 views
1

假設我有兩個具有相同結構的表,並且我想比較表中的數據。 如果對於一個特定的領域的數據是相同的,那麼我需要一個報告,將會說100%(匹配)否則我需要的數據在兩列不同的百分比。比較teradata表字段並返回字段匹配或不同的百分比

注意:需要對唯一密鑰進行連接。 (假設加入密鑰唯一且不爲空)

回答

1

做兩個表的相交併將計數與表中任一個的記錄總數進行比較。要找出百分比,請比較匹配計數和總計數。

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來找出不匹配的記錄。

1

我已經假設兩個表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 
1

我相信下面就爲您提供的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子句可以針對缺少的記錄,沒有方差的記錄或帶有方差的記錄。

相關問題