我拼命想在这里找到这个问题,但找不到与这个问题有关的任何内容。
在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吗?
答案 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