根据您的用例,这可能不是一个好主意。您最好将“计数”创建为计算列,或者将其完全从基表中移除并创建一个包含计数列的视图。此外,我通常会避免尝试使用名称也是保留字的列,例如 Count。
但是,如果您真的想这样做,您可以在一个查询中完成。只是为了确保我们在同一页面上,我相信您试图仅按关闭时间分组,并且帐户和项目不会包含在分组中(因此,如果相同的关闭时间和不同的项目将被计算在内) ,但希望能够仅更新目标帐户和项目。
在这种情况下,它看起来大致像
with cte1 as
(select
closetime, COUNT(*) as numCount
from dbo.[statement]
group by closetime)
update dbo.[statement]
set [count] = cte1.numCount
from dbo.[statement] as sd
join cte1
on sd.closetime = cte1.closetime
where
sd.account = <your account num>
and sd.item = <your item>
编辑:
如果我从评论中正确理解了您想要的内容,那么您可以使用如下查询:
with cte1 as
(select
closetime, COUNT(*) as numCount
from dbo.[statement]
group by closetime)
select sd.*, --I normally would advise not using * in production
cte1.numCount as [Count]
from statement as sd
join cte1
on sd.closetime = cte1.closetime
where
sd.account = <your account num>
and sd.item = <your item>
虽然这确实使用了 CTE,但它是一条 SQL 语句,将在关闭时间显示所选帐户编号和项目的计数。