2013-12-12 83 views
2

我需要一個查詢來查找沒有得到「評級6」記錄的檢查/組件。我會插入新記錄,以便所有檢查/組件都具有「評級6」記錄以及其他可能的評分。TSQL:查找所需的缺失記錄

請考慮以下數據:57646,57652和57657是而不是正確,因爲他們錯過了他們的評級6記錄。在這個數據示例中,這三個應該是查詢返回的唯一檢查/組件。

InspectionID ComponentID  RatingTypeID 
138   57646   10 
138   57647   6 
138   57647   2 
138   57648   6 
138   57649   6 
138   57650   6 
138   57651   10 
138   57651   6 
138   57652   10 
138   57653   6 
138   57654   6 
138   57655   6 
138   57656   6 
138   57657   10 
+1

只是好奇,如果所有這些組合都需要這個等級類型,它起什麼作用?似乎這應該由應用程序或其他查詢邏輯處理,如果記錄丟失。 – JeffO

回答

4
SELECT * 
FROM YourTable A 
WHERE NOT EXISTS(SELECT 1 FROM YourTable 
       WHERE InspectionID = A.InspectionID 
       AND ComponentID = A.ComponentID 
       AND RatingTypeID = 6) 
+0

完美。謝謝。 –

2
SELECT A.InspectionID FROM MyTable AS A 
LEFT OUTER JOIN MyTable AS B 
ON A.InspectionID = B.InspectionID AND B.RatingTypeID = 6 
WHERE B.InspectionID IS NULL 
1

這應該做的工作在短短的一通。

SELECT src.* 
FROM 
(
    SELECT x.InspectionID, 
      x.ComponentID, 
      MAX(CASE WHEN x.RatingTypeID = 6 THEN 1 ELSE 0 END) AS HasRatingTypeID6 
    FROM dbo.MyTable x 
    GROUP BY x.InspectionID, x.ComponentID 
) src 
WHERE src.HasRatingTypeID6 = 1 
0
select * from YOURTABLE where componentId not in (select componentId from YOURTABLE where RatingTypeId=6)