自定义分隔符 - 结果集中的计数器行号
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
我有一个重要的问题。我会解释我的场景。
我正在构建一个存储过程,它接收一个名为“@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