【问题标题】:SQL Retest same table that returns 1st rowSQL重新测试返回第一行的同一张表
【发布时间】:2011-12-08 14:36:03
【问题描述】:

我是 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,该测试重新检查每个ContNO 的整个contitems.tofollow 结果,但不知道如何实现它.. 谁能帮忙..?

【问题讨论】:

  • select top 1 没有order by 子句将检索SQL Server 当时最方便检索的行 - 结果可能在两次运行之间有所不同查询。
  • 感谢 Ocaso..今天早上出去了,很抱歉回复晚了.. 它选择的前 1 个结果并不重要,只要它只是我需要的一行.. 但是我需要在最后的 where 子句中重新测试同一张表,但不确定如何处理它。 contitems.tofollow > 0 语句只是测试返回的单行。我需要测试 contitems 表中与原始 ContItems.CONTNO 匹配的所有条目= dbo.Contracts.CONTNO

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


【解决方案1】:

我想到了另一种方法,即选择具有最大 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)

【讨论】:

    猜你喜欢
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2014-12-01
    • 1970-01-01
    相关资源
    最近更新 更多