首页 > 解决方案 > 添加列以确保复合键是唯一的

问题描述

我有一个表,它需要一个基于 2 列 ( Material number, Plant) 的复合主键。

例如,这是目前的情况(请注意,这些行不是唯一的):

MATERIAL_NUMBER    PLANT NUMBER
------------------ ----- ------
000000000000500672 G072  1
000000000000500672 G072  1
000000000000500672 G087  1
000000000000500672 G207  1
000000000000500672 G207  1

但是,我需要将附加列 ( NUMBER) 添加到复合键中,以便每一行都是唯一的,并且它必须像这样工作:

对于 each MATERIAL_NUMBER,对于 each PLANT,让我们NUMBER从 1 开始,并为每个重复记录增加 1。

这将是所需的输出:

MATERIAL_NUMBER    PLANT NUMBER
------------------ ----- ------
000000000000500672 G072  1
000000000000500672 G072  2
000000000000500672 G087  1
000000000000500672 G207  1
000000000000500672 G207  2

我将如何实现这一点,特别是在 SQL Server 中?

最好的祝福!

标签: sqlsql-servercomposite-primary-key

解决方案


解决了。

见下文:

SELECT MATERIAL_NUMBER, PLANT, (ROW_NUMBER() OVER (PARTITION BY MATERIAL_NUMBER, PLANT ORDER BY VALID_FROM)) as NUMBER
FROM Table_Name

将输出有问题的表,并正确定义了 NUMBER 列


推荐阅读