sql server row_number()count为零

时间:2014-11-13 21:31:29

标签: sql-server row-number

我正在加入两个表,一个有缺陷,另一个有缺陷状态。缺陷状态表通常对每个缺陷都有多行。

select d.defectID, d.defectName, ds.status
from (
      select d.defectID d.defectName, ds.status, 
              row_number() over (partition by ds.defectID order by ds.updateTimestamp desc) as rn 
      from defect d left join DefectStatus ds 
      on d.defectID=ds.defectID) as 
   T
where rn=1

只要存在缺陷状态,查询就会起作用。当状态记录不存在时,不返回缺陷记录。当然使用了左连接,但where子句阻止它包含在结果集中。请告知是否有更好的方法来检索具有状态的所有缺陷记录(如果有)。

1 个答案:

答案 0 :(得分:0)

我认为OUTER APPLY可以为您要实现的目标提供更清晰的查询:

SELECT d.defectID, d.defectName, T.status
FROM Defect AS d
OUTER APPLY (
   SELECT TOP 1 ds.Status
   FROM DefectStatus AS ds
   WHERE d.defectID = ds.defectID
   ORDER BY ds.UpdateTimestamp DESC
) T

使用上述查询,您可以获取来自Defect数据的所有记录,这些记录由DefectStatus中的最新相关记录加入,以防这些记录存在。