求一个统计类的交叉报表的SQL语句
A表:
区域,城市,分类1,分类2,分类3,款,sku,销售数量
北方 ,北京,夏季,登山类,男士,26789,26789-999,100
北方 ,北京,夏季,登山类,男士,26789,26789-000,200
北方 ,河北,夏季,登山类,男士,26789,26789-000,90
北方 ,河北,夏季,登山类,男士,23445,23445-000,120
南方 ,上海,夏季,登山类,男士,26789,26789-999,180
南方 ,上海,夏季,登山类,男士,26789,26789-000,280
南方 ,上海,夏季,登山类,男士,26789,26789-000,190
南方 ,上海,夏季,登山类,男士,23445,23445-000,320
B表:
区域,城市,分类1,分类2,分类3,款,sku,库存数量
北方 ,北京,夏季,登山类,男士,26789,26789-999,400
北方 ,北京,夏季,登山类,男士,26789,26789-000,600
北方 ,河北,夏季,登山类,男士,26789,26789-000,900
北方 ,河北,夏季,登山类,男士,23445,23445-000,800
南方 ,上海,夏季,登山类,男士,26789,26789-999,460
南方 ,上海,夏季,登山类,男士,26789,26789-000,800
南方 ,上海,夏季,登山类,男士,26789,26789-000,900
南方 ,上海,夏季,登山类,男士,23445,23445-000,860
求:
城市,分类1,分类2,分类3,南方款数量,南方sku数量,南方销售数量,南方库存数量,北方款数量,北方区域sku数量,北方销售数量,北方库存数量
------解决方案--------------------不知道varchar(8000)够不够
declare @sql varchar(8000)
declare @sql1 varchar(8000)
declare @sql2 varchar(8000)
declare @sql3 varchar(8000)
set @sql= ' '
set @sql1= ' '
set @sql2= ' '
set @sql3= ' '
select @sql=@sql+ ',sum(case when 区域= ' ' '+区域+ ' ' ' and 款= ' ' '+款+ ' ' ' then 销售数量 end 0 end) as [ '+区域+款+ '数量] '
from a
group by 区域,款
select @sql1=@sql1+ ',sum(case when 区域= ' ' '+区域+ ' ' ' and 款= ' ' '+sku+ ' ' ' then 销售数量 end 0 end) as [ '+区域+sku+ '数量] '
from a
group by 区域,sku
select @sql2=@sql2+ ',sum(case when 区域= ' ' '+区域+ ' ' ' then 销售数量 end 0 end) as [ '+区域+ '数量] '
from a
group by 区域
select @sql3=@sql3+ ',sum(case when 区域= ' ' '+区域+ ' ' ' then 库存数量 end 0 end) as [ '+区域+ '库存数量] '
from b
group by 区域
exec( 'select 城市,分类1,分类2,分类3 '+@sql+@sql1+@sql2+@sql3+ ' from (
select *,cast(0 as numeric(18,2)) as 库存数量 from a union all select 区域,城市,分类1,分类2,分类3,款,sku,0 as 销售数量,库存数量 from b) as t group by 城市,分类1,分类2,分类3 ')
------解决方案--------------------你的问题提的好像本身就有问题!你自己想想!如果把“城市”放在第一个字段,那就已经区分出了南方和北方,后面怎么会又同时存在南方的数量和北方的数量呢??