Как поровну разделить запись на 3 в SQL. См. Пример ниже.
DocNos SiteCode SiteName
11111 0001 Canada
11111 0002 Australia
11111 0003 China
11111 0004 Japan
11111 0005 India
11111 0006 Brazil
11111 0007 England
11111 0008 Italy
Желаемый результат
DocNos SiteCode SiteName Group
11111 0001 Canada 1
11111 0002 Australia 1
11111 0003 China 1
11111 0004 Japan 2
11111 0005 India 2
11111 0006 Brazil 2
11111 0007 England 3
11111 0008 Italy 3


Использование такой функции, как row_number, с некоторой арифметикой. Измените знаменатель в соответствии с желаемым размером группы.
select t.*,1+(row_number() over(partition by docnos order by sitecode)-1)/3 as grp
from tbl t
@nikhilsugandh. . . да. SQL Server выполняет целочисленное деление.
Я бы предложил использовать оконную функцию NTILE():
SELECT
*,
NTILE() OVER(ORDER BY DocNos, SiteCode, SiteName) AS Grp
FROM table;
Другой способ, используя CTE (общие табличные выражения) и ROW_NUMBER():
WITH total_rows AS (
-- Count total rows
SELECT COUNT(*) row_count
FROM table
)
SELECT
*,
CAST(ROW_NUMBER() OVER(ORDER BY DocNos, SiteCode, SiteName) / row_count) AS INT) AS Grp
FROM table
CROSS JOIN total_rows;
Дальнейшее чтение:
NTILE(): https://docs.microsoft.com/en-us/sql/t-sql/functions/ntile-transact-sql?view=sql-server-2017ROW_NUMBER(): https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql?view=sql-server-2017
возвращает ли этот
(row_number() over(partition by docnos order by sitecode)-1)/3целое число, а не 1,33 1,66 ....