日期:2014-05-18 浏览次数:20570 次
select left(date,6) as 月份, F1=(select top 1 value from tb where left(date,6)=left(t.date,6) order by date), F2=max(value), F3=min(value), F4=(select top 1 value from tb where left(date,6)=left(t.date,6) order by date desc), F5=sum(value) from tb t group by left(date,6)
------解决方案--------------------
create table jc (code int, [date] date, F1 int, F2 int, F3 int, F4 int, F5 int) insert into jc select 1, '19910102', 10, 12, 8, 9, 500 union all select 1, '19910103', 9, 12, 8, 8, 2500 union all select 1, '19910104', 7, 12, 2, 4, 1500 union all select 1, '19910112', 13, 15, 8, 14, 500 union all select 1, '19910205', 11, 13, 8, 9, 500 union all select 1, '19910213', 10, 12, 6, 7, 1500 ;with t as (select code,[date],F1,F2,F3,F4,F5, row_number() over(partition by month([date]) order by [date]) rn, replace(left(date,7),'-','') mon from jc ) select a.code,cast(a.mon as varchar(6)) mon, (select top 1 F1 from t b where b.mon=a.mon and b.rn=1) F1, (select max(F2) from t b where b.mon=a.mon) F2, (select min(F3) from t b where b.mon=a.mon) F3, (select top 1 F4 from t b where b.mon=a.mon order by b.rn desc) F4, sum(F5) F5 from t a group by a.code,a.mon /* code mon F1 F2 F3 F4 F5 ----------- ------ ----------- ----------- ----------- ----------- ----------- 1 199101 10 15 2 14 5000 1 199102 11 13 6 7 2000 (2 row(s) affected) */