2017-01-11 95 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] –