先用查询语句合并多个相同的数据表(其中 id name 相同)
select id,name,data1,data2,data3 from TEST1 
UNION select id,name,data1,data2,data3 from TEST2
UNION select id,name,data1,data2,data3 from TEST3接下来
如何分组(id)查询 data1,data2,data3的平均值?或者不用先合并,如何查询 data1,data2,data3的平均值?

解决方案 »

  1.   

    select id,name,data1,data2,data3,avg(data1+data2+data3) as avgdata from TEST1 
    UNION select id,name,data1,data2,data3,avg(data1+data2+data3) as avgdata from TEST2
    UNION select id,name,data1,data2,data3,avg(data1+data2+data3) as avgdata from TEST3
      

  2.   

    不对!
    我要的是表1中的data1 表2中的data1 表3中的data1 的平均我要的是表1中的data2 表2中的data2 表3中的data2 的平均我要的是表1中的data3 表2中的data3 表3中的data3 的平均
      

  3.   

    建个临表tmp111 (结构只有id,name,data1,data2,data3)
    再建一个存储过程 proc_abc
    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GOCREATE    procedure proc_abc 
    ASdelete from tmp111insert into tmp111
    select id,name,data1,data2,data3 from TEST1 
    UNION select id,name,data1,data2,data3 from TEST2
    UNION select id,name,data1,data2,data3 from TEST3insert into tmp111 
    select 99999,'',avg(data1),avg(data2),avg(data3)select * from tmp111GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO
    调用:
    adoquery1.close;
    adoquery1.sql.text:= 'exec proc_abc';
    adoquery1.open;