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)' )