2012-10-23 70 views
1

我有一個請求給了我成千上萬行的結果,我想將它分成10k行的小臨時表,每個行有1到10 000的遞增數。讓我們說我有一個25 000行的大查詢,我想要的是將它分成2個10k的表格和5k的第三個表格。當然,我不知道我將不得不拆分的確切頁數。SQL正確地分割一個結果

我與所有行第一查詢被命名爲[#DECLARATION]和具有許多NumeroDeclaration,對於第1頁,圖1是0 2頁等,以9。每個10 000行它是從遞增0至10 000

在這個時候我的要求是這樣的:

--Page 1 
    SELECT * INTO [#PAGE1] FROM [#DECLARATION] WHERE NumeroDeclaration =0 ORDER BY NumeroTransaction; 
     --Numerotation 
     WITH upd AS (SELECT NumeroDeclaration, ROW_NUMBER() OVER (ORDER BY NumeroTransaction) AS Numtemp FROM [#PAGE1]) 
     UPDATE upd SET NumeroDeclaration = Numtemp 
    --Page 2 
    SELECT * INTO [#PAGE2] FROM [#DECLARATION] WHERE NumeroDeclaration =1 ORDER BY NumeroTransaction; 
     --Numerotation 
     WITH upd AS (SELECT NumeroDeclaration, ROW_NUMBER() OVER (ORDER BY NumeroTransaction) AS Numtemp FROM [#PAGE2]) 
     UPDATE upd SET NumeroDeclaration = Numtemp 
    --Page 3 
    --etc.... to Page 10... 

我必須這樣做,超過10頁,和它的作品,但有另一種 /分類器對d的方式它呢?

進出口使用SQL SERVER 2008感謝您閱讀

+2

爲什麼它拆分臨時表,而不只是選擇組行希望每個時間? –

+0

@ GabyakaG.Petrioli因爲在我把它分成更小的表格之後,我必須從每張表格中寫出標題,然後將它們一起植入到業務對象中。我知道我可以使用一個簡單的python腳本將其導出到.csv,但我不被允許:( – prince

回答

2

我仍然不知道爲什麼你需要拆分爲較小的表,你不能在單一[#DECLARATION]表中使用的過濾器。

您的查詢意味着[#DECLARATION]表已通過NumeroDeclaration列分區到頁面。

你可以做

Declare @recordsPerPage AS int 
SELECT @recordsPerPage = 10000; 
SELECT 
    *, 
    ROW_NUMBER() OVER (PARTITION BY NumeroDeclaration ORDER BY NumeroTransaction ASC) AS Tempnum, 
    NumeroDeclaration+1 AS Page 
FROM numbered 

這將使嵌入式page頁列和Tempnum列一個結果,將每個頁面復位。

希望這有助於

+0

感謝您的幫助,但我仍然必須寫10次「select * into Y [Y]頁面中的[#PageX] X「。無論如何,我認爲做一個視圖或臨時表就像你的答案是很好的**最終的目標是通過業務對象將每10k行導出到一個csv文件中,並根據10k行信息計算出第一行。 **儘管如此,你的回答很可愛,因爲它可以讓我更新X10 – prince