我有下表:
row_date logid type Interval availtime avail_distribution
9/25/2013 122 4 850 640 NULL
9/25/2013 122 5 850 0 NULL
9/25/2013 122 7 850 0 NULL
9/26/2013 122 4 850 500 NULL
9/26/2013 122 5 850 0 NULL
9/26/2013 122 7 850 0 NULL这里,每个avail_distribution都要按照availtime, group by row_date,logid and Interval的平均值进行更新。
更新后所需的表:
row_date logid type Interval availtime avail_distribution
9/25/2013 122 4 850 640 213.3333
9/25/2013 122 5 850 0 213.3333
9/25/2013 122 7 850 0 213.3333
9/26/2013 122 4 850 500 167.66667
9/26/2013 122 5 850 0 167.66667
9/26/2013 122 7 850 0 167.66667Select sum(availtime)/count(availtime)
from table
group by row_date,logid,Interval; 给我我所追求的价值。但是,我无法按照我想要的方式更新avail_distribution列。
发布于 2013-09-27 15:19:10
使用CTE (公共表表达式)将允许您在执行实际更新之前轻松地执行所需的任何分组/逻辑。
;WITH cte_update as (
Select
row_date,
logid,
Interval,
sum(availtime)/count(availtime) as avail_dist
from
table
group by
row_date,
logid,
Interval )
update t
set
t.avail_distribution = cte.avail_dist
from
table as t
inner join cte_update as cte
on t.row_date = cte.row_date
and t.logid = cte.logid
and t.interval = cte.interval发布于 2013-09-27 15:19:57
这也许能行。
UPDATE a
SET a.avail_distribution = b.val
FROM TableName a INNER JOIN
( Select row_date,logid,Interval,
sum(availtime)/count(availtime) val
from [Table] group by row_date,logid,Interval
) b ON a.row_date = b.row_date AND
a.logid = b.logid AND
a.Interval = c.Interval但是你为什么要像这样存储数据呢?从长远来看,您将始终执行此脚本来更新该列,这会带来一定的开销。
发布于 2013-09-27 15:32:03
另一种更新数据的方法.
Declare @Data Table
(
row_date datetime,
logid int,
type int,
Interval int,
availtime float,
avail_distribution float
);
Insert Into @Data(row_date,logid,type,Interval,availtime) Values
('9/25/2013', 122, 4, 850, 640),
('9/25/2013', 122, 5, 850, 0),
('9/25/2013', 122, 7, 850, 0),
('9/26/2013', 122, 4, 850, 500),
('9/26/2013', 122, 5, 850, 0),
('9/26/2013', 122, 7, 850, 0);
;WITH CTE
as
(
Select *, Avg(availtime) Over (partition by row_date,logid,Interval)
as value_of_avail_distribution from @Data
)
Update CTE Set avail_distribution = value_of_avail_distribution
select * from @Datahttps://stackoverflow.com/questions/19054239
复制相似问题