-1

我有这张桌子:在此处输入图像描述

我需要在 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

可以计入一个更新查询吗?

4

1 回答 1

1

根据您的用例,这可能不是一个好主意。您最好将“计数”创建为计算列,或者将其完全从基表中移除并创建一个包含计数列的视图。此外,我通常会避免尝试使用名称也是保留字的列,例如 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 语句,将在关闭时间显示所选帐户编号和项目的计数。

于 2012-07-06T21:48:58.847 回答