我有这张桌子:
我需要计算CloseTime列中同一行的出现次数,并在最后一列Count中写出出现次数,其中包含Item和同一帐户的where子句。
我对具体项目和帐户的单一选择是
SELECT CloseTime, COUNT(*) AS CloseTime
FROM Statement
WHERE Account = 2013169 AND item = 'eurusd'
GROUP BY CloseTime
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC
可以计入一个更新查询吗?
答案 0 :(得分:1)
根据您的使用情况,这可能不是一个好主意。最好将“Count”创建为计算列,或将其完全从基表中删除,并创建包含count列的视图。此外,我通常会避免尝试使用名称也是保留字的列,例如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语句,它将按照关闭时间显示所选帐号num和item的计数。