MySQL 에서이 쿼리가 있습니다.
select * from table1 LIMIT 10,20
SQL Server에서이 작업을 어떻게 수행 할 수 있습니까?
답변
SQL SERVER 2005를 시작하면 다음을 수행 할 수 있습니다.
USE AdventureWorks;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber BETWEEN 10 AND 20;
또는 2000 이하 버전에서는 이와 같은 것입니다 …
SELECT TOP 10 * FROM (SELECT TOP 20 FROM Table ORDER BY Id) ORDER BY Id DESC
답변
어리석은 일이지만 효과가 있습니다.
SELECT TOP 10 * FROM table WHERE id NOT IN (SELECT TOP 10 id FROM table ORDER BY id) FROM table ORDER BY id
MSSQL의 LIMIT 절 누락은 형사 IMO입니다. 이런 종류의 복잡한 해결 방법을 수행하지 않아도됩니다.
답변
SQL SERVER 2012부터 OFFSET FETCH 절을 사용할 수 있습니다.
USE AdventureWorks;
GO
SELECT SalesOrderID, OrderDate
FROM Sales.SalesOrderHeader
ORDER BY SalesOrderID
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
GO
http://msdn.microsoft.com/en-us/library/ms188385(v=sql.110).aspx
by by가 고유하지 않으면 올바르게 작동하지 않을 수 있습니다.
조회가 ORDER BY OrderDate로 수정되면 리턴 된 결과 세트가 예상과 다릅니다.
답변
이것은 10 월에 제가 물었던 질문과 거의 같습니다 :
Microsoft SQL Server 2000의 MySQL LIMIT 절 에뮬레이션
Microsoft SQL Server 2000을 사용하는 경우 좋은 해결책이 없습니다. 대부분의 사람들은 IDENTITY
기본 키를 사용하여 임시 테이블에서 쿼리 결과를 캡처해야 합니다. 그런 다음 BETWEEN
조건을 사용하여 기본 키 열에 대해 쿼리하십시오 .
Microsoft SQL Server 2005 이상을 사용하는 경우 ROW_NUMBER()
함수가 있으므로 동일한 결과를 얻을 수 있지만 임시 테이블은 피하십시오.
SELECT t1.*
FROM (
SELECT ROW_NUMBER OVER(ORDER BY id) AS row, t1.*
FROM ( ...original SQL query... ) t1
) t2
WHERE t2.row BETWEEN @offset+1 AND @offset+@count;
@Leon Tayson의 답변에 표시된 것처럼 이것을 공통 테이블 표현식 으로 작성할 수도 있습니다 .
답변
이것이 MS SQL Server 2012의 결과를 제한하는 방법입니다.
SELECT *
FROM table1
ORDER BY columnName
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
참고 : OFFSET
와 함께 또는 함께 사용할 수 있습니다 ORDER BY
.
코드 줄을 설명하려면 OFFSET xx ROWS FETCH NEXT yy ROW ONLY
은 xx
당신이 테이블, 즉에서에서 당겨 시작하려는 레코드 / 행 번호입니다 : 표 1 (40 개) 기록이있는 경우, 위의 코드는 행 (10)으로부터 당겨 시작됩니다.
은 yy
당신이 테이블에서 끌어 할 기록 / 행의 수입니다.
이전 예제를 빌드하려면 다음을 수행하십시오. 테이블 1에 40 개의 레코드가 있고 10 행에서 가져 오기 시작하고 NEXT 세트 10 ( yy
)을 가져 오십시오 . 즉, 위의 코드는 행 10에서 시작하여 20에서 끝나는 테이블 1에서 레코드를 가져옵니다. 따라서 행 10-20을 가져옵니다.
OFFSET 에 대한 자세한 정보는 링크를 확인하십시오.
답변
SELECT *
FROM (
SELECT TOP 20
t.*, ROW_NUMBER() OVER (ORDER BY field1) AS rn
FROM table1 t
ORDER BY
field1
) t
WHERE rn > 10
답변
문법적으로 MySQL LIMIT 쿼리는 다음과 같습니다 :
SELECT * FROM table LIMIT OFFSET, ROW_COUNT
이것은 다음과 같은 Microsoft SQL Server로 번역 될 수 있습니다
SELECT * FROM
(
SELECT TOP #{OFFSET+ROW_COUNT} *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS rnum
FROM table
) a
WHERE rnum > OFFSET
이제 쿼리 select * from table1 LIMIT 10,20
는 다음과 같습니다.
SELECT * FROM
(
SELECT TOP 30 *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS rnum
FROM table1
) a
WHERE rnum > 10