SQL Retest返回第一行的同一个表

时间:2011-12-08 14:36:03

标签: sql sql-server sql-server-2005

当谈到sql时,我是初学者,这个有点过头了,希望有人能指出我正确的方向..

我编写了一个正确返回右表中一行的查询但是我需要在最后的where子句中添加另一个测试,该子句重新检查表并检查字段contitems.tofollow中的所有条目并查找值大于零,与返回的原始contracts.ContNo行匹配..

SELECT Contracts.*, Contitems.*
FROM   dbo.Contracts 
INNER JOIN dbo.ContItems 
 ON dbo.ContItems.RECID =       
  (SELECT TOP(1) RECID 
   FROM dbo.ContItems 
   WHERE (ContItems.CONTNO = dbo.Contracts.CONTNO))
WHERE  dbo.Contracts.SOURCE = 2 
 and (contracts.custom = 1 or contitems.tofollow > 0) 
 and contracts.status not in (4,9)

我需要将contitems.tofollow > 0替换为每个contitems.tofollow重新检查整个ContNO结果的测试,但不知道如何实现它。任何人都可以帮助..?

1 个答案:

答案 0 :(得分:0)

我想到了通过选择具有最大TOFOLLOW数量的单行来实现此目的的另一种方法 - 无需进一步测试..

   SELECT Contracts.*, Contitems.*
   FROM   dbo.Contracts 
   INNER JOIN dbo.ContItems 
   ON dbo.ContItems.RECID =       
  (SELECT TOP(1) RECID 
  FROM dbo.ContItems 
  WHERE (ContItems.CONTNO = dbo.Contracts.CONTNO)
   ORDER BY TOFOLLOW Desc)
 WHERE  dbo.Contracts.SOURCE = 2 
 and (contracts.custom = 1 or contitems.tofollow > 0)