日期:2014-05-17  浏览次数:20402 次

mssql里表A,B里面分别存储了rdate,area,phonenum,表A存储订购,表B存储退订信息。
rdate:注册时间,area 区号,phonenum号码,现在要查A,B表,所有在一段时间内注册的号码总数,如2012.1.1-2013.8.1,要求按地市区号,按年,月来分,统计总数,结果如下显示:
   年   月  南京   苏州   泰州  连云港 
2012 1   500     600    700   800
2012  2  100    200     600    100   
这个里面知道应该要用到case 语句,但是怎么把表A,B的结果关联,然后按照年月地市来统计呢?
mssql

------解决方案--------------------
行列转换,请参考:
http://blog.csdn.net/hdhai9451/article/details/5026933  


------解决方案--------------------
--把A,B两表符合条件的结果合并到C表
create table C(rdate datetime,area varchar(100),phonenum int)
insert into C
select rdate,area,phonenum from A where (条件表达式)
union all select brdate,barea, bphonenum from B where (条件表达式)


--动态生成sql 语句
declare @sql varchar(8000)
set @sql=''
select @sql=@sql + ',['+rtrim(area)+']=sum(case area when '''+rtrim(area)+''' then phonenum end)'
from C group by area
exec('select convert(varchar(7),rdate,120) as rdate'+@sql+'from  C group by convert(varchar(7),rdate,120)' )