2010-02-23 61 views
0

我想查詢表,以便it's訂購方式如下:尋呼和自定義排序結果

1)「條目」 2)「條目#」 3)「條目東西」 4)「..entry ..」

我通過聯盟所有和4個不同的查詢做到了這一點。

但此外,我想包括分頁,以便我可以f.ex.收到行號1-100,101-200等。我試過Row_Num()Over(Order By),但沒有完成,我認爲是因爲Order By-clause會破壞我自己的訂單 。

我的查詢看起來是這樣的(有點簡化)

SELECT Keyword FROM Keyword WHERE Keyword LIKE 'Keyword' Union All SELECT * FROM Keyword WHERE Keyword like '%Keyword%' AND NOT LIKE 'Keyword' 

和整個查詢我嘗試了:

WITH SearchResult as 
(SELECT * FROM Keyword WHERE Keyword like 'Keyword' Union All SELECT * FROM Keyword WHERE Keyword like '%Keyword%' AND NOT LIKE 'Keyword') 
SELECT * FROM 
(SELECT ROW_NUMBER() OVER (ORDER BY Keyword DESC) AS RowNum, * 
FROM SearchResult) AS Results 
WHERE (RowNum BETWEEN (1 - 1) * 100 + 1 AND 1 * 100) 
+0

你能發佈你的整個查詢嗎? – Wil 2010-02-23 14:06:36

回答

0

環繞你被聯合查詢,在另一個作爲派生表和你可以使用top子句。

SELECT TOP 100 * FROM (
    SELECT * FROM table where field = 'entry' 
    UNION ALL 
    SELECT * FROM table where field = 'entry#' 
) sortedresults 

你在正確的軌道上,然後。爲每個排序結果的子集添加一個定義的列,然後您可以使用它來保持排序順序。

WITH SearchResult AS 
    (SELECT *, ROW_NUMBER() OVER (ORDER BY QueryNum) as RowNum FROM 
    (SELECT *, 1 as QueryNum FROM KeywordTable WHERE field = 'Keyword' 
     UNION ALL 
     SELECT *, 2 from KeywordTable WHERE field = 'Keyword#' 
    ) SortedResults 
) 
SELECT * from SearchResults WHERE RowNum BETWEEN 4 and 10 

所以他們爲了保持運行之間的相同,你也排序關鍵字比其他的東西每個子查詢是很重要的(並作爲行號功能的輔助排序)。例如:假設你有k1,k2,k3,k4,k5 - 如果你選擇*其中關鍵字如k%,你可能會得到k1,k2,k3,k4,k5一次,k5,k4,k3,k2,k1接下來(SQL不保證退貨訂單,它可以不同)。這將甩掉你的分頁。

+0

對不起,我的問題不是很準確。我希望能夠獲得任何行,而不僅僅是前100行,用於分頁。 – AGuyCalledGerald 2010-02-23 14:21:58