日期:2014-05-16  浏览次数:20956 次

高分求助,以下语句或查询该如何实现,谢谢
环境:ASP+SQL SERVER2000
SQL视图TEST的结构如下:
   季度  /    姓名/  销量
2011年4季度  /张三/  100
2012年1季度  /张三/  100
2012年2季度  /张三/  100
2012年2季度  /张三/  50
2012年1季度  /李四/  50
2012年2季度  /李四/  70
2012年3季度  /李四/  60

要想实现的结果,在ASP页面上显示:
假设在ASP页面中将时间设定为2012年2季度,要求得到以下查询:
姓名/  本季度销量     /本年度销量       /      累计销量
张三/     150     /       250         /       350
李四/     70     /        120           /       120   
(注:因2013年3季度在2季度之后,数据不纳入统计)


假设在ASP页面中将时间设定为2012年3季度,要求得到以下查询:
姓名/  本季度销量     /本年度销量       /累计销量
张三/     150     /       250         /     350
李四/     70     /        120           /     180  
(注:2013年3季度的数据纳入统计)
请问该如何实现,特求助。
asp sql?server

------解决方案--------------------
select 姓名,sum(销量) as 本季度销量,(select sum(销量) from TEST where left(季度,4)='2012' and 姓名=a.姓名) as 本年度销量,(select sum(销量) from TEST where 姓名=a.姓名) as 累计销量 
from TEST a where 季度='2012年2季度' group by 姓名


------解决方案--------------------
分开来写,先把姓名取出来
1.取出姓名: select distinct 姓名 from test

下名的姓名用1的变量
按季度:select 姓名,sum(销量) from test where 季度=‘2012年2季度’ group by 姓名

按年度:select 姓名,sum(销量) from test where left(季度,4)='2012'  group by 姓名

累计:select 姓名,sum(销量) from test
------解决方案--------------------
declare @s varchar(20)
set @s = '2012年3季度'

select 姓名, sum(销量) 销量
from test
where
 (left(季度, 4) < left(@s, 4))
or
 (left(季度, 4) = left(@s, 4) and substring(季度, 6, 1) <= substring(@s, 6, 1))
group by 姓名