2015-07-13 57 views
0

我正在使用SQL Server Management Studio 2008並使用TOP從數據庫中選擇一些數據。從SQL中選擇一些行號

SELECT 
    TOP 3 Name, Company, ta_Content, Email, Writedate 
FROM dbo.ta_CONTACT 
WHERE Name in ('David', 'Filo', 'Rain', 'Cone', 'Source', 'Tailor', 'Fier', 'Venesse') 
ORDER BY Writedate; 

所以通過使用TOP 3,我可以收集來自8個給定數據的前3個數據。但是我想要做的是從給定的8個數據中選擇5-7個數據。

我可以使用ROW_NUMBER()但我想要使用TOP邏輯通過使用NOT IN。但我不確定在什麼地方放置NOT IN邏輯僅顯示第5-7個數據。

+0

什麼版本的SQL服務器正在使用? –

+0

提姆答案是要走的路。但如果那不能回答你的問題,你應該提供一個更詳細的例子。因爲你說不想/知道使用'ROW_NUMBER'。嘗試在[Sql小提琴](http://sqlfiddle.com/)中寫入您的架構 –

+0

我正在使用2008版本的SQL,並感謝Sql Fiddle建議! – jooShin

回答

2

嘗試此查詢:

SELECT * FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY Writedate ASC) AS rownumber, 
    Name, Company, ta_Content, Email, Writedate 
    FROM dbo.ta_CONTACT 
) AS t 
WHERE rownumber >= 5 AND rownumber <= 7 
+0

關鍵ASC部分的命令是什麼意思? – jooShin

+0

沒問題我知道了 – jooShin

+0

不,我沒有索引列 – jooShin

0

試試這個query.It是不正確的方式。

select TOP 2 Name, Company, ta_Content, Email, Writedate from (
SELECT TOP 3 Name, Company, ta_Content, Email, Writedate FROM dbo.ta_CONTACT 
WHERE Name in ('David', 'Filo', 'Rain', 'Cone', 'Source', 'Tailor', 'Fier', 'Venesse') 
ORDER BY Writedate desc)a ORDER BY Writedate 
0

使用TOP(3),並篩選出該行1 - 4,那麼你可以得到5 - 7條

SELECT TOP (3) 
    * 
FROM 
(
    SELECT 
     ROW_NUMBER() OVER (ORDER BY Writedate) Seq, 
     Name, Company, ta_Content, Email, Writedate 
    FROM dbo.ta_CONTACT 
    WHERE 
     -- The search criteria must be inside the inner select statement 
     Name in 
     ('David', 'Filo', 'Rain', 'Cone', 'Source', 'Tailor', 'Fier', 'Venesse') 
) filtered 
WHERE 
    Seq >= 5 
    -- If you do not need the TOP statement just use below condition 
    -- Seq BETWEEN 5 AND 7