首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问一个关于统计汇总的动态SQL~

2012-02-22 
请教一个关于统计汇总的动态SQL~~~createtabletb_car_sale(车架号varchar(50)primarykey,销售时间datetime

请教一个关于统计汇总的动态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
')

热点排行