2012-10-23 41 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