根据多列生成ID

时间:2018-03-29 08:52:41

标签: sql sql-server

我拼命想在这里找到这个问题,但找不到与这个问题有关的任何内容。

在SQL(SMSS)中,我想要一个ID列。应根据同一表中的3列生成ID的值。

ID | column1 | column2 | column3
1  | 2016    | 101     | 1
2  | 2017    | 101     | 1
2  | 2017    | 101     | 1
3  | 2017    | 303     | 1

有人可以帮我生成这个ID吗?

1 个答案:

答案 0 :(得分:5)

首先,请注意在数据库表中有重复行并不是一个好主意。 数据库表中的行应该是唯一的。

但是,这并不意味着您的表只包含这些列 - 它可能很好地包含与您的问题无关的其他列,所以这里是:

使用DENSE_RANK()

首先,创建并填充样本表(在将来的问题中将此步骤保存起来)

DECLARE @T AS TABLE
(
    column1 int,
    column2 int,
    column3 int
)

INSERT INTO @T (column1, column2, column3) VALUES
(2016, 101, 1),
(2017, 101, 1),
(2017, 101, 1),
(2017, 303, 1)

查询:

SELECT DENSE_RANK() OVER(ORDER BY Column1, Column2, Column3) AS ID,
       Column1,
       Column2,
       Column3
FROM @T

结果:

ID  Column1 Column2 Column3
1   2016    101     1
2   2017    101     1
2   2017    101     1
3   2017    303     1