2013-04-12 2 views
1

필자는 피벗 테이블과 분석을 수행하기 위해 Excel에 들어가야하는 커다란 데이터 세트를 가지고 있습니다.SQL Server : Excel로 페이지 매기기

일반적으로 데이터가 1 ​​백만 라인 표시에 도달하지 않기 때문에이 작업을 수행 할 수 있습니다. SQL Server 데이터 가져 오기를 수행하고 SQL 문을 지정합니다.

여기에 내 현재 SQL

WITH n AS (
    Select A1.AccountID, A1.ParentAccountID, A1.Name 
    FROM Account AS A1 
    WHERE A1.ParentAccountID = 92 
UNION ALL 
    SELECT A2.AccountID, A2.ParentAccountID, A2.Name 
    FROM Account AS A2 
    JOIN n 
    ON A2.ParentAccountID=n.AccountID 
) 
select n.*, D.DeviceID, A.*, P.* 
FROM n 
LEFT OUTER JOIN 
    Device AS D 
    ON D.AccountID = n.AccountID 
LEFT OUTER JOIN 
    Audit as A 
    ON A.AccountID = n.AccountID 
RIGHT OUTER JOIN 
DeviceAudit As P 
ON P.AuditID = A.AuditID 
WHERE A.AuditDate > CAST('2013-03-11' AS DATETIME) 
ORDER BY n.AccountID ASC, P.DeviceID ASC, A.AuditDate DESC 

이 권한은 지금 나에게 내가 필요의 100 %를 반환합니다. 지난 30 일 동안 1,800 만 기록 다음 10 만 건 또는 50 만 건의 레코드를 찾을 수있는 간단한 방법이 있기를 바랬습니다.

나는 오프셋을 사용할 수있는 것은 아니지만 첫 번째 청크를 얻으려면 TOP 100000을 사용할 수 있습니다.

현재 실행 중이며 20 분 내에 완료됩니다. 이것은 이것을 수행해야하는 많은 계정 계층 구조 중 하나입니다. 바라기를이 pagination는 cpu 현명한 너무 비싸지 않을 것이다.

CSV로 가져 오기를 시도했으나 12GB 크기의 CSV 파일을 제공하기 때문에 시간이없고 따로 떨어져 있습니다.

, ROW_NUMBER() OVER (ORDER BY {whatever id}) AS row 

는 그런 다음 이전 쿼리 하위 쿼리와 쿼리를 만들 수 있습니다 : SQL 2005 원래 쿼리의 select 절에 행 번호를 추가하기 때문에

+0

답변을 찾았습니까? 나는 같은 상황에 처해있다. –

답변

0

예, 행 번호에 매겨진 하위 쿼리 작업을 수행 할 수 있습니다 다음 행에 :

SELECT TOP {results per page} * 
FROM ({your previous sql statement}) 
WHERE row > {page# * results per page}