2011-12-08 40 views
0

我是初學者,當談到SQL和這個人是有點超過我的頭,希望有人能指出我的方向是正確的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) 

我需要用測試t代替contitems.tofollow > 0帽子重新檢查整個contitems.tofollow結果爲每個ContNO,但不知道如何實現它..任何人都可以幫助..?

+1

'選擇1'上面沒有'爲了by'條款是怎麼回事檢索哪一行最方便SQL Server在那時檢索* - 結果可能因查詢的兩次運行而不同。 –

+0

感謝Ocaso ..今天早上出來很抱歉,對於遲到的回覆..只要它只是我需要的一條線,它選擇的前1個結果並不重要..但是,我需要在最後的測試中重新測試同一張表where子句和不知道如何解決它.. contitems.tofollow> 0語句只是測試返回的單行..我需要測試contitems表中的所有條目匹配原始ContItems.CONTNO = dbo.Contracts.CONTNO – user552769

回答

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)