日期:2014-05-18 浏览次数:20582 次
create table ta(工程ID varchar(32),工程的值 int)
go
insert ta select '001',0
go
create table tb(主键 int identity(1,1), 同一个点的唯一标识 varchar(32), 测量方法 varchar(120), 数值 int, 所在工程ID varchar(32))
go
insert tb
select 'A', 'AAA', 1,'001' union all
select 'A','BBB',2,'001' union all
select 'B','CCC',199,'001' union all
select 'B','AAA',200,'001' union all
select 'B','BBB',201,'001'
update ta set 工程的值=c.平均值 from
(
select avg(平均值)平均值 from (select a.工程ID,b.同一个点的唯一标识,avg(b.数值)平均值 from ta a join tb b on a.工程ID=b.所在工程ID
group by a.工程ID,b.同一个点的唯一标识)aa where 工程ID=aa.工程ID)c
------解决方案--------------------
select 工程ID, avg(avg_value) as avgValue
from (
select 工程ID, 点的唯一标识, avg(数值) as avg_value
from 点的测量表
group by 工程ID, 点的唯一标识
) as a
group by 工程ID
------解决方案--------------------
--> 测试数据:[TEST]
if object_id('[TEST]') is not null drop table [TEST]
create table [TEST]([工程ID] varchar(3),[工程的值] sql_variant)
insert [TEST]
select '001',null
--> 测试数据:[DETAILS]
if object_id('[DETAILS]') is not null drop table [DETAILS]
create table [DETAILS]([主键] int,[同一个点的唯一标识] varchar(1),[测量方法] varchar(3),[数值] int,[工程ID] varchar(3))
insert [DETAILS]
select 1,'A','AAA',1,'001' union all
select 2,'A','BBB',2,'001' union all
select 3,'B','CCC',199,'001' union all
select 4,'B','AAA',200,'001' union all
select 5,'B','BBB',201,'001'
UPDATE [TEST]
SET [工程的值]=A.[数值] FROM(
SELECT [工程ID],SUM([数值])[数值]
FROM(
SELECT
[同一个点的唯一标识],[工程ID],AVG(CAST([数值] AS FLOAT)) AS [数值]
FROM [DETAILS]
GROUP BY
[同一个点的唯一标识],[工程ID])T GROUP BY [工程ID])A
WHERE A.工程ID=TEST.工程ID
SELECT * FROM TEST
/*
工程ID 工程的值
001 201.5
*/
------解决方案--------------------
update ta set 工程的值= case when c.平均值 is null then 工程的值 else c.平均值 end from
(
select avg(平均值)平均值 from (select a.工程ID,b.同一个点的唯一标识,avg(b.数值)平均值 from ta a join tb b on a.工程ID=b.所在工程ID
group by a.工程ID,b.同一个点的唯一标识)aa where 工程ID=aa.工程ID)c
------解决方案--------------------
create table ta(工程ID varchar(32),工程的值 int)
go
insert ta select '001',0
go
select * from ta
/*
工程ID 工程的值
001 0*/
create table tb(主键 int identity(1,1), 同一个点的唯一标识 varchar(32), 测量方法 varchar(120), 数值 int, 所在工程ID varchar(32))
go
insert tb
select 'A', 'AAA', 1,'001' union all
select 'A','BBB',2,'001' union all
select 'B','CCC',199,'001' union all
select 'B','AAA',200,'001' union all
select 'B','BBB',201,'001'
select * from tb
/*
主键 同一个点的唯一标识 测量方法 数值 所在工程ID
1 A AAA 1 001
2 A BBB 2 001
3 B CCC 199 001
4 B AAA 200 001
5 B BBB 201 001
*/
update ta set 工程的值= case when c.平均值