如何在SQL Server中为行分区设置分区ID /名称?

bil*_*ill 5 sql sql-server select row

如何在SQL Server中为行分区设置分区ID /名称?

name surname val
a  b      10
c  d      2
a  b      11
a  b      13
Run Code Online (Sandbox Code Playgroud)

结果(按名称和姓氏划分):

 name surname val rowno partitionid

 a    b        10   1    1
 a    b        11   2    1
 a    b        13   3    1
 c    d        2    1    2
Run Code Online (Sandbox Code Playgroud)

cha*_*sky 5

DECLARE @table TABLE( name CHAR(1) , surname CHAR(1) , val TINYINT )

INSERT INTO @table
VALUES ( 'a' , 'b' , 10 ) 
, ( 'c' , 'd' , 2 )
, ('a' , 'b' , 11 )
, ( 'a' , 'b' , 13 )

SELECT * FROM @table

SELECT *
, ROW_NUMBER() OVER ( PARTITION BY name, surname ORDER BY val ) as rowno
, DENSE_RANK() OVER ( ORDER BY name ) as partitionid
FROM @table
Run Code Online (Sandbox Code Playgroud)

问候!

  • 使用DENSE_RANK:如果在同一分区中有两个或更多行并列,则每个并列的行都将收到ROW_NUMBER的相同列,这不会发生。 (2认同)