行和列都是动态的,这个报表效果该怎么写?
--要求统计每个部门每个员工每款车型的销售数量
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
*/