【问题标题】:Compare teradata table fields and return the percentage by which the fields are matching or differing比较 teradata 表字段并返回字段匹配或不同的百分比
【发布时间】:2014-03-19 07:05:55
【问题描述】:

假设我有 2 个结构相同的表,我想比较表中的数据。 如果特定字段的数据相同,那么我需要一份报告,显示 100%(匹配),否则我需要两列中数据不同的百分比。

注意:需要加入唯一键。 (假设加入键唯一且不为空)

【问题讨论】:

    标签: sql compare field 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 来找出不匹配的记录。

    【讨论】:

      【解决方案2】:

      我假设有两个表 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
      

      【讨论】:

        【解决方案3】:

        当两个表中都存在唯一键时,我相信以下内容将为您提供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 子句可以针对缺失的记录、没有差异的记录或有差异的记录。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-02
          • 2015-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多