日期:2014-05-19  浏览次数:20421 次

数据比较
有张表
                    年               月             数量         名称
2007             3 20             鼠标                
2007             4 26             鼠标                
2008             1 21             光驱                
2007             3 24             硬盘              
2007             4 26             硬盘  

要查询2007年4月比2007年3月数量大20%名称列出来    
效果如下:
名称       年       4月数量         3月数量    
鼠标     2007         26                     20

------解决方案--------------------
declare @a table(年 int, 月 int, 数量 int, 名称 varchar(19))
insert @a select 2007 ,3 ,20 , '鼠标 '
union all select 2007 ,4 ,26 , '鼠标 '
union all select 2008 ,1 ,21 , '光驱 '
union all select 2007 ,3 ,24 , '硬盘 '
union all select 2007 ,4 ,26 , '硬盘 '

select * from
(
select 名称,年,
[4月]=sum(case when 月=4 then 数量 else 0 end),
[3月]=sum(case when 月=3 then 数量 else 0 end)
from @a group by 名称,年
) aa
where [4月]> [3月]*1.2

------解决方案--------------------
create table test(年 int,月 int,数量 int,名称 varchar(10))
insert test select 2007,3,20, '鼠标 '
union all select 2007,4,26, '鼠标 '
union all select 2008,1,21, '光驱 '
union all select 2007,3,24, '硬盘 '
union all select 2007,4,26, '硬盘 '

select 名称,年,[4月数量]=sum(case when 月=4 then 数量 end),
[3月数量]=sum(case when 月=3 then 数量 end)
from test
group by 名称,年
having
(sum(case when 月=4 then 数量 end)*1.0
-sum(case when 月=3 then 数量 end))/sum(case when 月=3 then 数量 end)=0.3

名称 年 4月数量 3月数量
---------- ----------- ----------- -----------
鼠标 2007 26 20