sql - 添加列以确保复合键是唯一的
问题描述
我有一个表,它需要一个基于 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 中?
最好的祝福!
解决方案
解决了。
见下文:
SELECT MATERIAL_NUMBER, PLANT, (ROW_NUMBER() OVER (PARTITION BY MATERIAL_NUMBER, PLANT ORDER BY VALID_FROM)) as NUMBER
FROM Table_Name
将输出有问题的表,并正确定义了 NUMBER 列
推荐阅读
- ios - 如何快速测试缓存的响应?
- html - Hugo - 获取视频标题并将其转换为 URL
- .net - 在 Angular 中实现 JWT 访问令牌后从 API 获取列表时出现 401 错误
- html - 如何在其他内容上显示登录页面并在显示登录页面时删除滚动条?
- python - Python - 输入 pycharm 时 cv2 包未显示任何功能
- node.js - 查询 dynamoDb 表
- javascript - 当我从 .env 获取 API_URL 作为环境变量时,出现错误。我安装了 dotenv
- json - 颤振错误:列表
不是 Map 类型的子类型 - java - graalvm 来宾语言可以使用 3rd 方库吗?
- flutter - 'String' 不是 'index' 的 'int' 类型的子类型...我无法解决此错误