【发布时间】:2019-10-02 17:03:38
【问题描述】:
假设我有一张桌子
Declare @table table
(
id int,
month_col varchar(10),
present_col bit,
absent_col bit,
leave_col bit
);
insert into @table
values (1, 'Jan', 1, 0, 0),
(2, 'Jan', 1, 0, 0),
(3, 'Jan', 0, 1, 0),
(4, 'Jan', 1, 0, 0),
(5, 'Jan', 0, 1, 0),
(6, 'Jan', 1, 0, 0),
(7, 'Jan', 1, 0, 0);
在更新某些行时,我需要检查所有先前的行离开 col 以决定当前行,这需要对所有行进行,我已经通过这样的 while 循环实现了这一点
while(for all rows)
begin
update @table
set l = mylogic_function((select count(leave_col)
from @table
where id<currentrow.ID))
where id = currentrow.ID
end
但我想通过使用 CTE 来执行此逻辑。
【问题讨论】:
-
但请记住,当行得到更新时,它的结果将包含在下一行更新中
-
简单易懂:当一行正在更新时,最近更新的那些行的记录是同一个查询。
-
用您正在使用的数据库标记您的问题。期望的结果也会有所帮助。我不明白你想要实现的逻辑。
mylogic_function()是做什么的? -
@GordonLinoff 我正在使用 sql server 2008,mylogic_function() 正在检查其他来源的请假记录,并使用上次的 leave_col 数据做出决定,但此列必须具有最新值。
-
请澄清“更新行时”的含义。在有序查询中可能存在使用秩、密集秩或不同计数的窗口函数。 . ??也许向我们展示输入和预期输出。
标签: sql-server tsql common-table-expression