2014-03-04 6 views
0

SQL2005에서이 쿼리에 오프셋을 적용하는 방법은 무엇입니까?SQL Server 2005 OFFSET

SELECT [name],[phone] 
FROM (
     SELECT *,Row_Number() Over (Partition By phone Order By (Select Null)) AS RN 
     FROM Table1 
    ) AS T 
Where RN = 1 

감사

+0

'전화 번호 별 파티션 (Select Null) '특정 순서는 보장하지 않습니다. 따라서 'RN BETWEEN 10 AND 20'이'RN BETWEEN 20 AND 30'과 같은 행을 반환하지 않는다는 보장이 전혀 없습니다. –

답변

1

은 MSSQL 2005에서 지원되지 오프셋,하지만 당신은이 작업을 수행하려면 다음 approuch을 사용할 수 있습니다. 당신이 이전 이름으로 분류되었다 100-90에서 10 레코드를 선택하는 경우, 당신은 쿼리

;with data as 
(
    SELECT [name],[phone] 
    FROM (
     SELECT *,Row_Number() Over (Partition By phone Order By (Select Null)) AS RN 
     FROM Table1 
    ) AS T 
    Where RN = 1 
) 
select * from 
    ( select top(10) * from 
      ( select top(100) * from data order by name asc) 
     t1 order by name desc 
    ) t2 order by name 
+0

레코드를 얻는 방법은 20에서 30까지입니다. –

+0

변경 선택 상단 (100)을 선택하여 상단 (30) – fastobject

0

를 사용할 수 있습니다 나는 나 자신에 의해이 문제를 해결했다. 이 쿼리를 다른 열 이름과 함께 사용합니다.

with CTE as (
    SELECT cFullname,BuyerPhoneNumber 
    FROM (
     SELECT *,Row_Number() Over (Partition By BuyerPhoneNumber Order By (Select Null)) AS RN 
     FROM [Order] 
    ) AS T 
    Where RN = 1 
) 
SELECT * 
FROM (
SELECT Row_Number() OVER (ORDER BY cFullname ASC) AS CI_offset_row_number, * 
FROM CTE 
) AS A 
WHERE A.CI_offset_row_number BETWEEN (21) AND (30)