1、a表:
代码 出现日期 成交量
A001 2005-5-1 1
A002 2005-5-3 2
A001 2005-6-3 3
A002 2005-6-4 4
A001 2005-5-1 5
A002 2005-5-3 6
A001 2005-6-3 7
A002 2005-6-4 8
A001 2005-6-5 9
A002 2005-6-6 10
A001 2006-7-9 11
A002 2006-7-9 12
2。要求从a表中生成b表:
时间范围:从2005-5-1 到2005-6-6
统计这个时间范围的代码出现的总次数,并把各自的成交量从小到大排列,检索出前三个最小成交量和相应出现的日期。
正确的手工结果如下:
代码 出现总次数 开始日期 截至日期 最小的成交量 最小成交量出现日期 次最小的成交量 次最小的成交量出现日期 再次最小的成交量 再次最小的成交量出现日期
A001 5 2005-5-1 2005-6-6 1 2005-5-1 3 2005-6-3 5 2005-5-1
A002 5 2005-5-1 2005-6-6 2 2005-5-3 4 2005-6-4 6 2005-5-3
代码 出现日期 成交量
A001 2005-5-1 1
A002 2005-5-3 2
A001 2005-6-3 3
A002 2005-6-4 4
A001 2005-5-1 5
A002 2005-5-3 6
A001 2005-6-3 7
A002 2005-6-4 8
A001 2005-6-5 9
A002 2005-6-6 10
A001 2006-7-9 11
A002 2006-7-9 12
2。要求从a表中生成b表:
时间范围:从2005-5-1 到2005-6-6
统计这个时间范围的代码出现的总次数,并把各自的成交量从小到大排列,检索出前三个最小成交量和相应出现的日期。
正确的手工结果如下:
代码 出现总次数 开始日期 截至日期 最小的成交量 最小成交量出现日期 次最小的成交量 次最小的成交量出现日期 再次最小的成交量 再次最小的成交量出现日期
A001 5 2005-5-1 2005-6-6 1 2005-5-1 3 2005-6-3 5 2005-5-1
A002 5 2005-5-1 2005-6-6 2 2005-5-3 4 2005-6-4 6 2005-5-3
解决方案 »
- SQLSERVER2005是不是可以隐藏数据库或者隐藏数据库里某个表啊?
- SQL2000, 如何在存储过程中调用外部webservice,返回一个xml结构的dataset,然后将数据写入到一个数据表中? ###100分跪求##
- sql2005“ 备份数据库”任务找不到要备份数据库!
- 由于语法不熟悉,导致存储过程报错,大伙帮忙看看
- 复制监视器上一个大红叉,可是已经快照和发布都是成功的,为什么?
- 为什么利用Log Explorer的salvage命令按钮只导出216条数据,各位救命啊!!
- IBM3850服务器上的WIN2000环境下的SQL 2005管理程序慢如龟爬……
- 如何获取一定格式的日期格式?谢谢
- 可不可以在Windows 2000 Server中安装MS SQL 6.5
- 怎样解决ORACLE中空值匹配的问题
- 求简单的办法将字段和其大小,是否为空,说明等导出至文本
- 兩表資料對寫.觸發器死循環的問題
drop table t1
go
if object_id('pubs..t2') is not null
drop table t2
go
create table t1
(
代码 varchar(10),
出现日期 datetime,
成交量 int
)
insert into t1(代码,出现日期,成交量) values('A001','2005-5-1',1)
insert into t1(代码,出现日期,成交量) values('A002','2005-5-3',2)
insert into t1(代码,出现日期,成交量) values('A001','2005-6-3',3)
insert into t1(代码,出现日期,成交量) values('A002','2005-6-4',4)
insert into t1(代码,出现日期,成交量) values('A001','2005-5-1',5)
insert into t1(代码,出现日期,成交量) values('A002','2005-5-3',6)
insert into t1(代码,出现日期,成交量) values('A001','2005-6-3',7)
insert into t1(代码,出现日期,成交量) values('A002','2005-6-4',8)
insert into t1(代码,出现日期,成交量) values('A001','2005-6-5',9)
insert into t1(代码,出现日期,成交量) values('A002','2005-6-6',10)
insert into t1(代码,出现日期,成交量) values('A001','2005-7-9',11)
insert into t1(代码,出现日期,成交量) values('A002','2005-7-9',12)
godeclare @dt1 as varchar(10)
declare @dt2 as varchar(10)set @dt1 = '2005-05-01'
set @dt2 = '2005-06-06'select px = (select count(1) from t1 where 代码 = a.代码 and 成交量 <a.成交量) + 1 , * into t2 from t1 a
where 出现日期 >= @dt1 and 出现日期 <= @dt2
order by 代码 , 成交量
delete from t2 where px > 3declare @sql varchar(8000)
set @sql = ''
select @sql = @sql + ', max(case when px = ''' + cast(px as char(1)) + ''' then 成交量 else null end) as 成交量' + cast(px as char(1)) +
', max(case when px = ''' + cast(px as char(1)) + ''' then convert(varchar(10),出现日期,120) else null end) as 出现日期' + cast(px as char(1))
from t2 group by px order by pxset @sql = 'select a.代码 , a.出现总次数 , 开始日期 = ''' + @dt1 + ''' , 截至日期 = ''' + @dt2 + ''' , b.成交量1 as 最小的成交量 , b.出现日期1 as 最小成交量出现日期 , b.成交量2 as 次最小的成交量 , b.出现日期2 as 次最小的成交量出现日期 , b.成交量3 as 再次最小的成交量 , b.出现日期3 as 再次最小的成交量出现日期 from ' +
'(select 代码 , count(*) as 出现总次数 from t1 where 出现日期 >= ''' + @dt1 + ''' and 出现日期 <= ''' + @dt2 + ''' group by 代码 ) a ,' +
'(select 代码 ' + @sql + ' from t2 group by 代码) b ' +
'where a.代码 = b.代码'EXEC(@sql)drop table t1
drop table t2