2017-01-11 58 views
0

我知道如何从不在另一个表中的表中获取记录。但是,这是我无法解决的。我有一个观点和一张桌子。一个是使用视图中的行创建的临时表。但是,由于记录操作,我现在缺少记录,而且有些记录不再匹配。例如,如果我有20个来自原始的SSN,我现在有17个或说24个记录在temp中,并且都应该匹配。从计数不匹配的两个表中获取记录和计数

发生这种事情的情况并不多,但有成千上万的记录并且手动完成所有操作都非常繁琐。

有没有办法获得记录和计数的地方不匹配?结果可以包括每个表格和表格名称的计数吗?

这是我有:

Select vw.UPC as [View], COUNT(vw.UPC) as [view Amount], tb.UPC as [Temp], COUNT(tb.UPC) as [temp Amount] 
From #tbTransfOUT tb 
JOIN vwTrans vw 
ON tb.UPC = vw.UPC 
Where vw.UPC NOT IN (Select vw2.UPC 
        From vwTrans vw2 
        JOIN #tbTransfOUT tb2 
        ON tb2.UPC = vw2.UPC 
        WHERE (Select COUNT(UPC) From #tbTransfOUT Group By UPC) = 
          (Select COUNT(UPC) From vwTrans Group By UPC) 
Group By vw.UPC 
Order By vw.UPC, COUNT(vw.UPC), tb.UPC, COUNT(tb.UPC) 

如果可能的话,我想包括源名(查看或临时表),而不是额外的列。这当然是程序结束时运行的代码的一部分,用于比较记录计数。

回答

1

我相信下面的工作。您可以分别测试每个CTE。完整的外连接找到在其中一个表中没有给定UPC的记录的情况

WITH VWCount (UPC, VWCount) 
as 
(SELECT UPC, COUNT(*) FROM vwTrans 
    GROUP BY UPC), 
TMPCount (UPC, TMPCount) AS 
(SELECT UPC, COUNT(*) FROM #tbTransFout 
GROUP BY UPC) 

SELECT vw.UPC, vw.VWCount, tmp.UPC, tmp.TMPCount 
    FROM VWCount vw 
    FULL OUTER JOIN TMPCount tmp 
    ON vw.UPC = tmp.UPC 
    WHERE COALESCE(vw.VWCount,0) <> COALESCE(tmp.TMPCount,0) 
+0

WOW!非常感谢Adam Jacobson。这正是我所要求的! –

+0

不客气@TiltingCode] –