请教一个关于统计汇总的动态SQL~~~
create table tb_car_sale(
车架号 varchar(50) primary key,
销售时间 datetime,
销售小组 varchar(20),
姓名 varchar(10),
车型 varchar(20),
员工编号 int)
insert tb_car_sale select '1001 ', '2007-1-1 ', '展厅一部 ', '张三 ', 'L4+ ',11
union all select '1002 ', '2007-1-1 ', '展厅一部 ', '李四 ', 'L4 ',12
union all select '1003 ', '2007-1-1 ', '展厅二部 ', '王五 ', 'GL ',13
union all select '1004 ', '2007-1-1 ', '展厅一部 ', '张三 ', 'GL ',11
union all select '1005 ', '2007-1-1 ', '展厅三部 ', '王六 ', 'GL2.5 ',14
---------------------------------------
create table tb_car_type(
TypID int primary key,
TypNam varchar(20))
insert tb_car_type select 1, 'L4 '
union all select 2, 'L4+ '
union all select 3, 'GL3.5 '
union all select 4, 'GL '
union all select 5, 'GL2.5 '
期望结果:(要求统计车型表里的所有车型)
销售小组 姓名 L4 L4+ GL3.5 GL GL2.5 总计
展厅一部 张三 0 1 0 1 0 2
展厅一部 李四 1 0 0 0 0 1
合计 1 1 0 1 0 3
展厅二部 王五 0 0 0 1 0 1
合计 0 0 0 1 0 1
展厅三部 王六 0 0 0 0 1 1
合计 0 0 0 0 1 1
共计 1 1 0 2 1 5
谢谢
[解决办法]
-- 查询
declare @s varchar(8000)
set @s= ' '
select @s = @s + ', ' +quotename(TypNam)+ '=sum(case 车型 when ' + quotename(TypNam, ' ' ' ') + ' then 1 else 0 end) '
from tb_car_type
exec( '
select
销售小组 = case
when grouping(销售小组) = 1 then ' ' ' '
when grouping(姓名) = 1 then ' ' ' '
else 销售小组 end,
姓名 = case
when grouping(销售小组) = 1 then ' '共计 ' '
when grouping(姓名) = 1 then ' '合计 ' '
else 姓名 end
' + @s + ',总计=count(*)
from tb_car_sale
group by 销售小组,姓名 with rollup
')