日期:2014-05-18  浏览次数:20537 次

求助:一个sql语句,看似简单,却竟然都找不到解决办法
目的:我希望在查询数据时,就把三条记录合成一条。
例如:
数据表结构及数据如下:
          code1     code2       date1                 stat         value        
          2             abc           2007-5-6         最大值         15.0                
          2             abc           2007-5-6         最小值         1.3        
          2             abc           2007-5-6         平均值         8.6        
          4             xyz           2007-5-7         最大值         7.5          
          4             xyz           2007-5-7         最小值         0.3          
          4             xyz           2007-5-7         平均值         4.3          

其中code1,code2,date1,stat联合起来是唯一的(主键)
我希望查出的数据结果类似这样:

    2     abc   2007-5-6     15.0     1.3     8.6
    4     xyz   2007-5-7     7.5       0.3     4.3    

即后三项就是最大、最小、平均值
望各位指点!!


------解决方案--------------------
create table T(code1 int, code2 varchar(100), date1 datetime, stat varchar(100), value decimal(10,2))


insert into T select 2, 'abc ', '2007-5-6 ', '最大值 ',15.0
insert into T select 2, 'abc ', '2007-5-6 ', '最小值 ',1.3
insert into T select 2, 'abc ', '2007-5-6 ', '平均值 ',8.6
insert into T select 4, 'xyz ', '2007-5-7 ', '最大值 ',7.5
insert into T select 4, 'xyz ', '2007-5-7 ', '最小值 ',0.3
insert into T select 4, 'xyz ', '2007-5-7 ', '平均值 ',4.3


select a.code1,a.code2,a.date1,a.value as 最大值,b.value as 最小值,c.value as 平均值
from
(select * from T where stat= '最大值 ') as a
inner join (select * from T where stat= '最小值 ') as b on a.code1=b.code1 and a.code2=b.code2 and a.date1=b.date1
inner join (select * from T where stat= '平均值 ') as c on a.code1=c.code1 and a.code2=c.code2 and a.date1=c.date1


drop table T
------解决方案--------------------
declare @t table(code1 int,code2 varchar(5), date1 varchar(10),stat varchar(10),value decimal(10,1))
insert @t
select 2, 'abc ', '2007-5-6 ', '最大值 ', 15.0 union all
select 2, 'abc ', '2007-5-6 ', '最小值 ', 1.3 union all
select 2, 'abc ', '2007-5-6 ', '平均值 ', 8.6 union all
select 4, &#