2011-02-04 63 views
0

我有一个表说,Table1和另一个表说,ErrorTable1。 ErrorTable1具有在每个字段上应用验证后找到的来自Table1的所有错误记录。任何人都可以告诉我如何检查是否有超过1%的Table1记录是错误的?检查表中超过1%的记录是否有错误?

+2

在表1的每一行都可以在ErrorTable1多条记录或者是他们1比1?你只是想通过计数来比较? – Rup 2011-02-04 18:18:04

+0

我在Table1中有500条记录,验证后我得到了996条错误记录。但它只是一个垃圾数据。我想知道如何将两个计数的逻辑放在一起。 – Programmer 2011-02-04 18:20:28

回答

1
SELECT 
    'More than 1% fail', 100.0 * E.ErrCnt/T.RowCnt AS ErrorPercent 
FROM 
    (SELECT COUNT(*) AS ErrCnt FROM ErrorTable1) E 
    CROSS JOIN 
    (SELECT COUNT(*) AS RowCnt FROM Table1) T 
WHERE -- can use 1.0 ... > 0.01 too 
    100.0 * E.ErrCnt/T.RowCnt > 1 

变化COUNT(DISTINCT keycolumn)如果table1中的每一行都可以有多个错误在ErrorTable1

1

这应该给你的百分比,与数据有关的一些假设:

SELECT CAST((SELECT COUNT(DISTINCT Table1ID) FROM ErrorTable1) AS DECIMAL)/CAST(COUNT(ID) AS DECIMAL) FROM Table1

它基本上是寻找在表1的记录存在于ErrorTable1参考的任何单个实例,忽略测试。如果ErrorTable1中的一条或多条记录指向Table1中的记录,则为了达到百分比的目的,它会将其记录为单个“错误记录”。

编辑:我只是想到了别的......如果你关心的是如果百分比大于或等于1,那么你可能不需要铸造操作。你需要测试它是否确定,但是如果它只是将整数除以整数除法(我不是100%确定),那么你可以将它们作为整数并检查是否有正面结果。