自定义分隔符 - 结果集中的计数器行号

Custom divider - counter row number in Result Set

我有一个重要的问题。我会解释我的场景。

我正在构建一个存储过程,它接收一个名为“@rowcountdivider”的参数,它是 INTEGER。

我的结果集有这样的数据:

iStore  |  vCode  | iQty
----------------------------
9       |  00001  |   1
9       |  00001  |   1
9       |  00001  |   1
9       |  00001  |   1
9       |  00001  |   1
9       |  00002  |   1
9       |  00003  |   1
9       |  00003  |   1
9       |  00003  |   1

现在,我需要 'sum-count' 此行和我的输入参数(示例:@rowcountdivider = 4)。像这样:

iStore  |  vCode  | iQty  |  MasterCounter
-------------------------------------------
9       |  00001  |   1   |    1
9       |  00001  |   1   |    1
9       |  00001  |   1   |    1
9       |  00001  |   1   |    1 -- Their row number sum '@rowcountdivider' value (4) and MasterCounter increments in 1
9       |  00001  |   1   |    2
9       |  00002  |   1   |    2
9       |  00003  |   1   |    2
9       |  00003  |   1   |    2 -- Their row number sum the '@rowcountdivider' value (4) and MasterCounter increments in 1
9       |  00003  |   1   |    3 -- Their row number don't sum '@rowcountdivider' value (4) but i need assign them a value.

此外,table 将有 N 个寄存器,'@rowcountdivider' 将是 'divide' 行的任何整数,就像示例中一样。

有什么想法吗?

认为这就是您要找的东西?关于 'dividing the rows' 的评论几乎就在那里,您只需要添加一个行号和整数除以您的 @rowcountdivider(略微调整以考虑起始索引)

SELECT * INTO #Demo FROM (VALUES
 (9,'00001',1),
 (9,'00001',1),
 (9,'00001',1),
 (9,'00001',1),
 (9,'00001',1),
 (9,'00002',1),
 (9,'00003',1),
 (9,'00003',1),
 (9,'00003',1)
 ) A (iStore,vCode,iQty);


DECLARE @rowcountdivider INT = 4;
SELECT 
    iStore
    ,vCode
    ,iQty
    ,((ROW_NUMBER() OVER (ORDER BY vCode) - 1) / @rowcountdivider) + 1 MasterCounter 
FROM #Demo;

iStore      vCode iQty        MasterCounter
----------- ----- ----------- --------------------
9           00001 1           1
9           00001 1           1
9           00001 1           1
9           00001 1           1
9           00001 1           2
9           00002 1           2
9           00003 1           2
9           00003 1           2
9           00003 1           3