2012-02-17 11 views
3
Select id, name, ROW_NUMBER() OVER (ORDER BY id asc) as 'RowNo' 
from customers 
where RowNo between 50 AND 60 

50-60 사이의 행 서브 세트를 선택하려고합니다. 문제는 'RowNo'가 잘못된 열 이름입니다.Row_Number()를 사용하여 행의 서브 세트 선택

;WITH PaginatingData AS 
(
    Select id, name, ROW_NUMBER() OVER (ORDER BY id asc) as 'RowNo' 
    from customers 
) 
SELECT * 
FROM PaginatingData 
where RowNo between 50 AND 60 

사용하십시오 CTE (-에 "인라인보기"일종의 공통 테이블 식) :

당신은 같은 것을 할 필요가 2008 R2

+4

별칭에''구분 기호 ''를 사용하지 마십시오. 이 구문은 표준이 아니며 'SELECT'a ''b ''와 같이 매우 혼란스럽고 SQL Server에서는 사용되지 않습니다. '[대괄호]'(표준이 아님) 나''큰 따옴표 ''(표준)를 사용하거나 구분 기호를 사용하지 마십시오. 더 많은 정보와 많은 토론을 보려면 http://sqlblog.com/blogs/aaron_bertrand/archive/2012/01/23/bad-habits-to-kick-using-as-instead-of-for-column-aliases를 참조하십시오. aspx –

+0

PS 토론은 당신이 사용해야하는 것에 관한 것입니다. 작은 따옴표 *를 사용해서는 안된다는 주장은 거의 없습니다. –

+0

@Aaron : thnx,이 버전이 더 이상 사용되지 않거나 최신 버전에서는 허용되지 않았는지 확실하지 않았습니다. –

답변

10

는 울부 짖는 소리처럼 서브 쿼리로 쿼리를 사용

select * from (
    Select id, name, ROW_NUMBER() OVER (ORDER BY id asc) as [RowNo] 
    from customers 
) t 
where RowNo between 50 AND 60 

당신은 잘하지만 CTE를 사용할 수있는 또 다른이 Difference between CTE and SubQuery? 읽기를 통해 하나를 선택하고 실행 계획을 확인할지 여부.

+0

감사합니다. 왜 MySQL에서 LIMIT 49, 10을 사용할 때 이런 복잡한 쿼리를 수행해야하는지 모르겠습니다! 왜 우리가 't'라고 써야하는지 말해 주실 수 있습니까? – test

+2

@test : SQL 서버에는 MySQL과 마찬가지로'LIMIT x OFFSET y'가 없으므로. MySQL의'LIMIT n '과 같은'TOP n' 만 있습니다. –

+2

그러나 ROWN_NUMBER()와 같은 분석 함수를 사용하면 훨씬 복잡한 작업을 수행 할 수 있습니다 (MySQL에서는 정말 어렵습니다). –

5

SQL 서버에 사용하면

감사 RowNo이 유효한 열 이름이되도록 "래퍼"로 복사하십시오. -을 Outlook으로

SQL 서버 2012, 당신은 이런 식으로 뭔가를 쓸 수있을 것 :

SELECT 
    id, name 
FROM 
    dbo.customers 
ORDER BY 
    id 
OFFSET 50 ROWS 
FETCH NEXT 10 ROWS ONLY 

SQL 서버 2012에 직접 ORDER BY에 따라 페이징을 수행하는이 ANSI SQL 표준을 준수 표기를해야합니다 절. 더 많은 정보와 더 많은 샘플을 보려면 See this blog post (또는 기타 톤)

+0

'AS RowNo'는 따옴표가 필요하지 않습니다.''RowNo'', 그렇지 않습니까? –

+0

@ypercube 그렇지 않지만 잘못이 아닙니다. 그것은 T-SQL에서 볼 수있는 공통적 인 구문이 아닙니다. – Yuck

+0

@ypercube : 나는 절대적으로 필요하다고 생각하지 않는다 - 나는 방공호가 그것을 게시했을 때 방금 떠났다. 개인적으로,'RowNo = ROW_NUMBER() ..... 표기법을 사용 하겠지만 - 그건 개인적인 스타일 –

관련 문제