2013-12-12 152 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)