Sunday, May 4th, 2025
sql

如何用SQL自动生成序号和分序号

为一组检索出的记录自动生成序号或者分序号是较为常见的问题。这主要是为显示有序一些,序号或者分序号也有总数统计的功用。有一些表用int自增的ID作为主键,如果记录不被删除,用它作为序号是完全可以的,但是记录一般都可能被删除,序号就不连续了,用其他类型作为主键就无所谓序号了。

本文说明了如何自动添加序号和分序号的方法,分序号的目的是为了某种分类的需要,给分类的记录添加分序号。

1、表定义:

数据库名称为Demo。

CREATE TABLE [dbo].[User](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [姓名] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
    [性别] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

2、记录示例:

[姓名],[性别]
张山,男  
李静,女
李娜,女
李楠,男
王军,男
刘茜,女

3、添加序号命令

SELECT  ROW_NUMBER() OVER ( ORDER BY 姓名 ) AS [总序号] ,  [姓名] ,  [性别]
FROM   [demo].[dbo].[User]

得到:

1   李静    女
2   李娜    女
3   李楠    男
4   刘茜    女
5   王军    男
6   张山    男

4、添加分序号命令

按照姓名分类。

SELECT  ROW_NUMBER() OVER ( PARTITION BY [性别] ORDER BY [性别] ) AS [分序号] ,[姓名] ,  [性别]
FROM   [demo].[dbo].[User]

得到:

1   张山    男
2   李楠    男
3   王军    男
1   刘茜    女
2   李静    女
3   李娜    女

5、添加总序号和分序号命令

SELECT  ROW_NUMBER() OVER ( ORDER BY [A].[性别] ) AS 总序号 ,[A].[性别] , [A].[分序号] , [A].[姓名]
FROM   
(
       SELECT   ROW_NUMBER() OVER ( PARTITION BY [性别] ORDER BY [性别] ) AS [分序号] ,[姓名] ,[性别]
            FROM     [demo].[dbo].[User]
) AS A    

得到:

1   男   1    张山
2   男   2    李楠
3   男   3    王军
4   女   1    刘茜
5   女   2    李静
6   女   3    李娜

6、要点说明:

  1. 添加总序号一定给一个排序规则,必须有一个排序字段;
  2. 填加分序号,要指定分类的字段,先得到一个表,在此表的基础上,再填写总序号。

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注