SQL正确分割结果

时间:2012-10-23 15:29:41

标签: sql sql-server sql-server-2008

我有一个请求的结果,它给了我数千行,我想把它分成几个10k行的临时表,增量数从1到10 000.让我说我有一个大的查询25 000行,我想要的是将它分成2个10k的表和第三个5k的表。当然,我不知道我必须分成的确切页数。

  

我对所有行的第一个查询名为[#DECLARATION]并且编号为NumeroDeclaration,对于页面1为0,对于页面2为1,等等为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页以上执行此操作,并且它有效,但还有其他更短的 /更高级的方式吗?

我正在使用SQL SERVER 2008感谢阅读

1 个答案:

答案 0 :(得分: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列的结果集,该列将为每个页面重置。

希望这有帮助