source

처음 150개 행을 선택하고 다음 150개 행을 선택합니다.

factcode 2023. 8. 12. 10:45
반응형

처음 150개 행을 선택하고 다음 150개 행을 선택합니다.

테이블에서 오라클 SQL에서 처음 x 행을 선택한 다음 다음 x 행을 선택하려면 어떻게 해야 합니까?TOP/LIMIT를 사용하면 첫 번째 x를 얻을 수 있습니다.

select a from b limit 150=> 처음 150개 행을 가져옵니다.

편집: 왜?처음 150개의 출력을 파일로 복사하고 다음 150개를 다른 파일로 복사하고 싶습니다.

LIMIT 150또는LIMIT 0,150처음 150줄

LIMIT 150,150다음 150열

LIMIT 300,150다음 150열

등등

Oracle 환경에 적합한 솔루션을 제공합니다.rownum유사 열입니다.결과 집합의 레코드 번호를 매깁니다.선택 문에서 기준이 지정된 위치를 충족하는 첫 번째 레코드rownum=1그리고 동일한 기준이 증가하는 모든 이후 기록 회의rownum.

SELECT 
    a, b
FROM
    (SELECT rownum rn, a, b from table WHERE c=some_value ORDER BY some_column)
WHERE 
    rn BETWEEN 150 AND 300;

(@Mark Bannister 덕분에)

하위 쿼리에 ORDER BY 절을 포함하고 ROWNUM 조건을 최상위 쿼리에 배치하면 행 순서 지정 후 ROWNUM 조건을 강제로 적용할 수 있습니다.

페이지화 작업을 수행하려고 하는 것으로 가정합니다. 그렇다면 다음과 같이 수행할 수 있습니다.

허락하다pageSize있다150

SELECT * FROM
(
    SELECT a.*, rownum r__
    FROM
    (
        SELECT * FROM tblName c
    ) a
    WHERE rownum < ((pageNumber * pageSize) + 1 )
)
WHERE r__ >= (((pageNumber-1) * pageSize) + 1)
  1. 맨 위 선택 행에서 다음 방법으로 마지막 요소의 ID를 가져옵니다.

SQL 쿼리는 다음과 같습니다.

Select top 1 id from (SELECT TOP 150 * FROM (select top 150 * from outlet order by id asc)as d order by id desc) as b order by id asc
  1. 선택한 ID를 ViewState의 Session 개체, 즉 LastOutletID에 저장합니다.

  2. intPageSize = 150 선언 및 ViewState의 Session 개체에도 추가

다음과 같은 SQL 쿼리:

에서 상위 150 * 선택 (TOP 150 * FROM (ID > Last Outlet에서 상위 페이지 크기 * 선택)ID asc) as d order by id d desc) as border by id ascas

  1. 다음 상위 행을 선택하려면 1단계를 수행하여 마지막 요소 ID를 가져오고 저장한 다음 PageSize에 150을 추가하기만 하면 다음 151~300개의 행이 제공됩니다.

SQL Server용 솔루션: 1) 내 테이블에서 총 행 수를 가져옵니다.

예를 들어, MYTABLE에서 count(1)를 선택합니다. -- 500개 행

CTE를 사용하여 내 테이블의 각 행에 논리 행 번호를 할당합니다.

행 번호 간격 및 BETWAN 절을 사용하여 행 수를 선택합니다.

CTE AS(Row_NUMBER() OVER(내 열 1, 내 열 2, 내 열 3 순)를 행 번호로, t.* 내 테이블에서 선택)

CTE에서 *를 선택합니다. 여기서 행 번호는 150 - 300 사이입니다. MyColumn1, MyColumn2, MyColumn3 순으로 정렬합니다.

행의 총 개수에 도달할 때까지 다음 행 번호 간격을 사용하여 2) 및 3) 단계를 반복합니다.

Oracle 12부터는 FETCH와 OFFSET이 제공됩니다.

예를 들어, 한 파일에 150개의 행을 넣고 다음 150개의 행을 다른 파일에 넣을 수 있습니다.

Spool file1.txt
select a from b
order by a
Fetch first 150 rows only;
Spool off
Spool file2.txt
select a from b
offset 150 rows
Fetch next 150 rows only;
spool off

링크는 Oracle 12.2 문서의 행 제한 조항에 대한 철도 선로 다이어그램을 보여줍니다.

여기에 있는 예제에는 "주문 기준"도 포함되어 있는데, 이는 무언가의 TOP을 찾고 있는 경우 매우 의미가 있습니다.

이전 버전의 Oracle에서는 다른 답변에서 설명한 대로 rownum 및 order-by를 사용해야 했습니다.

언급URL : https://stackoverflow.com/questions/9631371/select-the-first-150-rows-then-the-next-150-and-so-on

반응형