2010-02-23 5 views
0
키우면는 다음과 같은 방법으로 주문할 수 있도록 내가 테이블을 조회 할

:페이징 및 맞춤 주문 결과

1) "항목" 2) "항목 번호" 3) "항목 뭔가" 을 4) ".. 엔트리 .."

나는 유니온 올 (All)과 4 가지 다른 쿼리를 통해이를 수행했다.

하지만 추가적으로 페이징을 포함 시켜서 f.ex 할 수 있습니다. 줄 번호 1-100, 101-200 등을받습니다. Row_Num() 이상 (Order By)을 시도했지만 완료하지 못했습니다. Order By 절이 내 자신의 순서를 파괴하기 때문에 생각합니다.

내 쿼리가이 같은 (약간 단순화 비트)

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

답변

0

파생 테이블로 다른 하나를 사용하여 UNION을 쿼리 랩을하고 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, (SQL은 반환 순서를 보장하지 않으며 다를 수 있습니다.) 그것은 페이징을 던질 것입니다.

+0

죄송합니다. 내 질문이 정확하지 않았습니다. 나는 페이징을 위해 첫 번째 100 행뿐만 아니라 inbetween 행을 얻을 수 있기를 원한다. – AGuyCalledGerald