2017-01-12 1 views
1

숫자 값이 채워진 DIVISION이라는 테이블이 있습니다. 그들은 유일하지 않습니다. 도달 레코드로 사람이 있고 그들에게 할당 된 DIVISION이 있습니다. DIVISION을 기반으로 테이블의 모든 n 번째 행을 선택할 수 있기를 원합니다.테이블에서 열을 선택하고 SQL Server의 해당 열 값을 기반으로 매우 n 번째 행을 얻으려면 어떻게해야합니까?

DIVISION 211에 60k 개의 레코드가 있고 매 n 번째 행을 선택하고 13k 개의 레코드를 얻는다면 말하십시오. 그런 다음 100,000 개의 레코드가있는 222를 말하고 23k를 선택합니다.

또한 첫 번째 13 번째 이후에 각 n 번째 행을 계산할 수 있어야합니다. 기본적으로 13으로 이동하여 시작점으로 사용하십시오. 13 후 모든 n 번째 행을 선택하십시오.

정직하게도 어디서부터 시작해야할지 모르겠다. Google에서 많은 예제를 시도했지만 대부분의 경우 구문을 제대로 실행할 수 없다.

내가 원하는대로 할 수있는 것처럼 보이는 MySQL에 대해 뭔가를 발견했지만 SQL Server와 동등한 기능을 찾을 수 없었습니다.

SELECT * 
FROM 
    (SELECT 
     @row := @row +1 AS rownum, noun 
    FROM 
     (SELECT @row :=0) r, nouns) ranked 
WHERE rownum %4 =1 

답변

1

여기에는 row_number()을 사용할 수있는 최신 버전의 SQL Server가 있다고 가정합니다. 매우 가능성이 높습니다 :

with data as (
    select *, row_number() over (partition by DIVISION order by <sort by column>) as rn 
    from WORK 
) 
select * 
from data 
where rn <= 13 or (rn - 13) % 18 = 1; 
+0

흠, 실제로이 구문 오류를 제공합니다. 호환성 모드를 90으로 설정해야한다고 나와 있습니다. – rohanharrison

+0

@rohanharrison 당신은 쿼리를 제공하지 않았으므로 논리에 통합 할 방법이 없습니다. 원래 쿼리를 올바르게 삽입 했습니까? – shawnt00

+1

@rohanharrison. . . 최신 버전의 SQL Server와의 호환성을 설정하십시오. 'row_number()'는 2005 년부터 지원되었습니다. 지원되지 않는 이전 버전을 사용할 이유가 없습니다. –

관련 문제