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

行和列都是动态的,这个报表效果该如何写

2012-03-04 
行和列都是动态的,这个报表效果该怎么写?--要求统计每个部门每个员工每款车型的销售数量createtable#tb_em

行和列都是动态的,这个报表效果该怎么写?
--要求统计每个部门每个员工每款车型的销售数量
create   table   #tb_emp(     --员工表
ID   int     primary   key,
Nam   char(10),
DeptNam   varchar(20))

insert   #tb_emp   select   1, '张刚 ', '销售一部 '
union   all   select     2, '王西 ', '销售二部 '
union   all   select     3, '李飞 ', '销售三部 '
union   all   select     4, '张扬 ', '销售三部 '
union   all   select     5, '黄明 ', '销售四部 '
--------------------------------------------
create   table   #tb_car_typ(   --车型表
ID   int   primary   key,
Nam   varchar(20))

insert   #tb_car_typ   select   1, '1.6LX '
union   all   select   2, '1.8GL(新) '
union   all   select   3, '1.6GL '
union   all   select   4, '1.7HRVW '
union   all   select   5, '1.6IEST '
--------------------------------------------
create   table   #tb_car(   --车辆基本信息表
CarID   varchar(20)   primary   key,
CarTypID   int)

insert   #tb_car   select   '1001 ',1
union   all   select   '1002 ',5
union   all   select   '1003 ',3
union   all   select   '1004 ',1
union   all   select   '1005 ',4
union   all   select   '1006 ',3
union   all   select   '1007 ',1
--------------------------------------------
create   table   #tb_car_sale(   --销车表
CarID   varchar(20)   ,
EmpID   int,
primary   key(CarID,EmpID))

insert   #tb_car_sale   select   '1001 ',1
union   all   select   '1002 ',3
union   all   select   '1003 ',5
union   all   select   '1004 ',2
union   all   select   '1005 ',2
union   all   select   '1006 ',4
union   all   select   '1007 ',1
--------------------------------------------
期望结果:
  部门           姓名     1.6LX         1.8GL(新)         1.6GL         1.7HRVW         1.6IEST
销售一部     张刚         2                     0                     0                     0                   0
销售二部     王西         1                     0                     0                     1                   0
销售三部     李飞         0                     0                     0                     0                   1
销售三部     张扬.       0                     0                     1                     0                   0


销售四部     黄明         0                     0                     1                     0                   0

说明:1.列的车型都来自#tb_car_typ,不管该车是否有卖出
          2.行为所有员工,不管该员工是否有车卖出
          3.车型和员工都是可维护的
   


[解决办法]
declare @s varchar(8000)
select @s = isnull(@s, ' ') + ', sum(case t.Nam when ' ' ' + t.Nam +
' ' ' then 1 else 0 end) as [ ' + t.Nam + '] '
from #tb_car_typ t
group by t.Nam, t.ID
order by t.ID

set @s = stuff(@s, 1, 1, ' ')
set @s = 'select e.DeptNam, e.Nam, ' + @s +
' from #tb_emp e, #tb_car_typ t, #tb_car c, #tb_car_sale s
where e.ID = s.EmpID and s.CarID = c.CarID and c.CarTypID = t.ID
group by e.DeptNam, e.Nam, e.ID
order by e.ID '

exec(@s)


/*
DeptNam Nam 1.6LX 1.8GL(新) 1.6GL 1.7HRVW 1.6IEST
----------- ------- -------- ---------- ------- --------- ---------
销售一部 张刚 2 0 0 0 0
销售二部 王西 1 0 0 1 0
销售三部 李飞 0 0 0 0 1
销售三部 张扬 0 0 1 0 0
销售四部 黄明 0 0 1 0 0
*/

热点排行