使用SQL按3或n值对记录进行平均分组

使用SQL按3或n值对记录进行平均分组,sql,sql-server,Sql,Sql Server,如何在SQL中将记录等分为3。请参考下面的例子 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 000

如何在SQL中将记录等分为3。请参考下面的例子

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

使用类似于
行数
的函数进行一些算术运算。根据所需的组大小更改分母

select t.*,1+(row_number() over(partition by docnos order by sitecode)-1)/3 as grp
from tbl t

使用类似于
行数
的函数进行一些算术运算。根据所需的组大小更改分母

select t.*,1+(row_number() over(partition by docnos order by sitecode)-1)/3 as grp
from tbl t

我建议使用
NTILE()
window函数:

SELECT
  *,
  NTILE() OVER(ORDER BY DocNos, SiteCode, SiteName) AS Grp
FROM table;
另一种方法是,使用CTE(公共表表达式)和
行号()

进一步阅读:

  • 排名功能:
  • NTILE()
  • 行号()

我建议使用
NTILE()
窗口功能:

SELECT
  *,
  NTILE() OVER(ORDER BY DocNos, SiteCode, SiteName) AS Grp
FROM table;
另一种方法是,使用CTE(公共表表达式)和
行号()

进一步阅读:

  • 排名功能:
  • NTILE()
  • 行号()

是否返回整数而不是1.33 1.66…@nikhilsugandh。对SQL Server进行整数除法。这是否
(按文档顺序按站点代码划分的行数())-1)/3
返回整数而不是1.33 1.66…@nikhilsugandh。对SQLServer进行整数除法。