计数出现的每一行,并更新到新列
我有这个表:计数出现的每一行,并更新到新列
我需要算在列CloseTime同一行的发生,写发生在最后一栏的数量与where子句数项目和相同的帐户。
我次选择混凝土项目和帐户
SELECT CloseTime, COUNT(*) AS CloseTime
FROM Statement
WHERE Account = 2013169 AND item = 'eurusd'
GROUP BY CloseTime
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC
有可能在一个更新查询算?
根据您的使用情况,这可能不是一个好主意。您最好将“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语句,并将显示sel的计数在他们的结束时间内完成帐户号码和项目。
我知道这不是一个好主意。但是我无法在一个查询中获得有关多个Count的所有信息。 – msavara 2012-07-06 21:51:17
@nørdic如果我们知道您难以阅读的屏幕截图所需的输出结果,我们可以向您展示如何在单个查询中获得结果。想想目标,而不是唯一的方式,你认为你可以达到目标。有多个人告诉你这是一个糟糕的主意是有原因的,但是你似乎确信自己陷入了糟糕的主意,我不确定我是否理解了原因。 – 2012-07-06 21:54:04
我知道。我的目标是从每个Item和Account列的屏幕截图CloseTime事件中获取数据。我很伤心,因为我试图去那里更新CALCULATE。 – msavara 2012-07-06 22:08:34
为什么您需要将这些冗余数据存储在列中?这只是意味着,无论何时插入,删除或更新行,您都将不断运行此查询以保持最新状态。 – 2012-07-06 21:45:02
因为我无法在一次选择中获得所有内容。这非常困难。 – msavara 2012-07-06 21:48:11
你可以显示你想要的选择作为输出吗? – 2012-07-06 21:48:52