用于在更新语句中重复的SQL代码逻辑
问题描述:
鉴于:我有一个带有3列即ID,MARKS和主题的表。用于在更新语句中重复的SQL代码逻辑
例如 -
表名(商标)
ID Marks Subject
323232 20
323232 10
323232 25
323232 2
为主题专栏中,我们被要求从下面的表更新
表名(主题)
ID Subject
323232 ENG
323232 SCI
323232 MAT
在这种情况下,我们需要更新如下主题的主题列:
ID Marks Subject
323232 20 ENG
323232 10 SCI
323232 25 MAT
323232 2 ENG --- ONCE THE 3 DISTINCT VALUES ARE UPDATED WE MUST REPEAT UNTIL THE ID CHANGES.
我曾尝试使用while循环逻辑更新,但更新MAT值后,我不能回去ENG 。
让我知道这是否可以使用SQL查询来实现。提前致谢!!!
答
我不知道你为什么会想向,但你可以用模算术做到这一点:
with toupdate as (
select m.*,
row_number() over (partition by id order by (select null)) as seqnum
from marks m
),
t as (
select s.*, count(*) over (partition by id) as cnt,
row_number() over (partition by id order by (select null)) as seqnum
from subject s
)
update toupdate
from toupdate join
s
on toupdate.id = s.id and toupdate.seqnum % s.cnt = s.seqnum % s.cnt;
+0
你能解释什么是“与toupdate”意味着在第一行? –
+0
@JohnChristopher。 。 。这就是所谓的通用表格表达式,通常由首字母缩略词CTE表示。 –
请分享你有什么到目前为止已经试过。另外,你真的在运行SQL Server 2008和SQL Server 2012吗?如果没有,请修复标签。哦,格式化。 – sstan
所以,你不关心哪个标记更新与哪个主题?,对我没有多大意义 – Lamak
你可以使用光标更新,但老实说,它的奇怪,你将如何知道标记25是为MAT而不是ENG,哪种标准被用来以这种方式对条目进行排序? – Monah