【发布时间】:2021-03-03 21:24:39
【问题描述】:
我正在尝试根据 StudNo、StudentName 更新 SeqNum 列值。每个相同的 StudNo、StudentName 集合都会有一个序列应该递增。
create table #student (
StudNo int,
StudentName char(50),
SeqNum int default 1, - newly added column
StudAddress char(50)
)
之前有seqNum(更新数据之前):
StudNo StudentName StudAddress
1 Ravi C
2 Ram XYZ
1 Ravi A
1 Ravi B
3 Ram HJK
以下是我们需要获取的输出数据(更新后):
StudNo StudentName SeqNum StudAddress
1 Ravi 1 C
2 Ram 1 XYZ
1 Ravi 2 A
1 Ravi 3 B
3 Ram 1 HJK
在上面的输出数据中,我们在第 1 行、第 3 行、第 4 行有 StudNo 1 和 StudentName 'Ravi'。所以 SeqNum 列的值分别是 1, 2,3。
以下是我的更新后的查询,它不会按预期更新。
update Student set seqNum=seq+1 where StudNo in (select StudNo from Student group by StudNo,StudentName having count(*) > 1)
and StudentName in (select StudentName from Student group by StudNo,StudentName having count(*) > 1)
注意:我们可以得到输出数据顺序 StudNo 和 StudAddress
谁能给我一个关于如何编写更新查询以根据其他列集增加 SeqNum 列值的想法。
提前致谢
【问题讨论】:
-
请更新问题以包含更新前的数据;另外,请提供有关如何排序数据的详细信息(例如,通过
StudAddress?)以获得“正确的”SeqNum(即,您如何知道哪一行应该有SeqNum=1,或=2,或=3)?;最后,到目前为止,您尝试了哪些 T-SQL 代码(以及它生成的“错误”输出是什么)? -
嗨@markp-fuso,请查看上面更新的帖子
-
根据您想要的输出,在分配
SeqNum值时(例如,StudAddress没有排序,因为ABC== 1,UXC== 2,JKL== 3) -
这里我提供了示例数据,真实数据将按正确的顺序排列
-
由于
StudAddress似乎没有任何特定的顺序,因此无法...以编程方式...确保分配SeqNums使得ABC== 1, @ 987654337@ == 2,JKL== 3;如果想法是保持数据与数据库中当前存在的“顺序”相同......请记住,一般来说,关系数据库中的数据没有“顺序”,除非“顺序”是通过索引、“order by”子句或(可能)单个行的物理存储来强制执行
标签: sql tsql sql-update sybase sap-ase