2012-07-06 55 views
-1

我有这个表:enter image description here计数出现的每一行,并更新到新列

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

有可能在一个更新查询算?

+1

为什么您需要将这些冗余数据存储在列中?这只是意味着,无论何时插入,删除或更新行,您都将不断运行此查询以保持最新状态。 – 2012-07-06 21:45:02

+0

因为我无法在一次选择中获得所有内容。这非常困难。 – msavara 2012-07-06 21:48:11

+0

你可以显示你想要的选择作为输出吗? – 2012-07-06 21:48:52

回答

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语句,并将显示sel的计数在他们的结束时间内完成帐户号码和项目。

+0

我知道这不是一个好主意。但是我无法在一个查询中获得有关多个Count的所有信息。 – msavara 2012-07-06 21:51:17

+1

@nørdic如果我们知道您难以阅读的屏幕截图所需的输出结果,我们可以向您展示如何在单个查询中获得结果。想想目标,而不是唯一的方式,你认为你可以达到目标。有多个人告诉你这是一个糟糕的主意是有原因的,但是你似乎确信自己陷入了糟糕的主意,我不确定我是否理解了原因。 – 2012-07-06 21:54:04

+0

我知道。我的目标是从每个Item和Account列的屏幕截图CloseTime事件中获取数据。我很伤心,因为我试图去那里更新CALCULATE。 – msavara 2012-07-06 22:08:34