日期:2014-05-18  浏览次数:20548 次

想写个统计的存储过程,在网上找了一个相似的例子,看不懂!!!求帮忙注释下????
Create   table   emp
(人员   varchar(20),   部门ID   varchar(10),   现在部门ID   varchar(10))
insert   into   emp
select   '甲 ', 'C ', '02 '  
union   all   select   '乙 ', 'C ', '01 '  
union   all   select   '丙 ', 'D ', 'D '  
union   all   select   '丁 ', 'E ', '01 '  
union   all   select   '戊 ', 'D ', '03 '  
Create   table   dept
(部门名称   varchar(20),   部门类型   int,   部门ID   varchar(10),   部门父ID   varchar(10)   )
insert   into   dept
select   '公司1 ',0, 'A ',NULL  
union   all   select   '公司2 ',0, 'B '   ,NULL  
union   all   select   '部门1 ',1   , 'C '   ,   'A '  
union   all   select   '部门2 ',1   , 'D '   , 'A '  
union   all   select   '部门3 '   ,1   , 'E '   , 'B '  
union   all   select   '工程点1 ',2, '01 '   ,NULL  
union   all   select   '工程点2 ',2, '02 '   ,NULL  
union   all   select   '工程点3 ',2   , '03 '   ,   NULL  
--建立存储过程
--
Create   Proc   P_sum(@searDept   varchar(10),
@Debug   int=0)
as
declare   @Sqlstr   varchar(8000)
Declare   @sqlstr1   varchar(8000)
declare   @FieldList   varchar(2000)
set   nocount   on
--得到所有的工程编号,并生成一个临时表对象
select   @FieldList= ' '
select   @FieldList=@FieldList+ ', '+部门名称   + '   int '   from   dept   where   部门类型=2   order   by   部门名称
select   @Sqlstr= 'Declare   @Dept   table   (部门名称   varchar(20),基地   int
'+@FieldList+ ',合计   int) '
--print   @sqlstr
--构造统计用SQL语句
select   @FieldList= ' '
select   @FieldList=@FieldList+ '
, '+部门名称+ '=sum(case   when   b.部门ID <> b.现在部门ID   and   b.现在部门ID= ' ' '+部门ID+ ' ' '   then   1   else   0   end) '  
from   dept   where   部门类型=2   order   by   部门名称---这个不知道什么意思???
--print   @FieldList
select   @Sqlstr1= '
insert   into   @dept----这个是什么,@dept没有声明过啊??
select   部门名称=case   when   a.部门名称   is   null   then   ' '合计 ' '   else   a.部门名称   end,  
基地=sum(case   when   b.部门ID=b.现在部门ID   then   1   else   0   end) '+@FieldList+ ',合计=0  
from   (Select   部门ID,部门名称   from   dept   where   部门父ID= ' ' '+@searDept+ ' ' ')   a
left   outer   join   emp   b   on   a.部门ID=b.部门ID  
group   by   a.部门名称  
with   rollup
'--a.部门名称,b.部门ID   a,b是什么表??这个语句是什么意思
select   @FieldList= ' '
select   @FieldList=@FieldList+ '+ '+部门名称   from   dept   where   部门类型=2   order   by   部门名称
Select   @fieldlist= 'update   @Dept &