基于其他列的值的动态标识

时间:2014-11-28 09:11:07

标签: sql-server row-number

我正在创建一个表,例如学生姓名,班级,滚动号

roll no设置为身份,学生的信息被保存在学生姓名,班级,滚动等表格中

我想要这样

Student Name    Class   Roll No
   Snehal         1      1
    Alok          1      2
   Sandeep        1      3
  Swapnil         1      4
   Kunal          1      5
   Amit           1      6
  Nitin           2      1
 Sudhanshu        2      2
  Lokesh          1      7
  Swati           2      3
  Rajesh          1      8

我想要当我插入任何人名并输入1级然后自动滚动时不应该是9当我插入任何名字并放入2级然后滚动否应该是4并且如果我输入人名与类3然后它的滚动不应该从1开始,因为它是第3类第一条记录,之后我输入人名并放入1级然后10它想要以这种方式使用身份功能请尽快建议我“死艰难条件“

1 个答案:

答案 0 :(得分:0)

您只需使用SQL Server的ROW_NUMBER()函数即可通过Class创建分区。这将有效地按类列对结果进行排序,并为类RollNo提供一个顺序值,直到类更改为止。

SQL架构设置:

CREATE TABLE StudentClass
    ([Student Name] varchar(9), [Class] int)
;

INSERT INTO StudentClass
    ([Student Name], [Class])
VALUES
    ('Snehal', 1),
    ('Alok', 1),
    ('Sandeep', 1),
    ('Swapnil', 1),
    ('Kunal', 1),
    ('Amit', 1),
    ('Nitin', 2),
    ('Sudhanshu', 2),
    ('Lokesh', 1),
    ('Swati', 2),
    ('Rajesh', 1)
;

SQL SELECT使用ROW_NUMBER()

SELECT  * ,
        ROW_NUMBER() OVER ( PARTITION BY Class ORDER BY Class ) AS RollNo
FROM    StudentClass

<强>输出:

Student Name    Class   RollNo
===============================
Snehal              1       1
Alok                1       2
Sandeep             1       3
Swapnil             1       4
Kunal               1       5
Amit                1       6
Lokesh              1       7
Rajesh              1       8
Swati               2       1
Nitin               2       2
Sudhanshu           2       3
相关问题