高送分求一SQL语句,出结果即结帖
有一张表TempTable,表结构及内容如下 
 _______________________________________ 
    ID         FileName      FileType      FileStatus 
    1            登记表                  	1	1 
    2            登记表            	2	2 
    3            监督方案      	1	2 
    4            安全培训记录	3	1 
    5            安全培训记录	1	2 
    6            专项方案1	2	2 
    7            专项方案2	2	2 
    8            专项方案2	3	2 
 ________________________________________ 
 说明:FileType的1表示阶段1,2表示阶段2,3表示阶段3 
                FileStatus的1表示新建、2表示上报 
 要求得出每阶段的表格记录总数、新建数、上报数, 
 如下: 
 _________________________________ 
 阶段               总数         新建数         上报数 
 _________________________________ 
 阶段1               3                  1                        2 
 阶段2               3                  0                        3 
 阶段3               2                  1                        1 
 __________________________________ 
------解决方案--------------------select  
        '阶段 ' + FileType  as 阶段 , 
       count(*) AS  总数, 
      sum(case when FileStatus=1 then 1 else 0 end) as 新建数, 
      sum(case when FileStatus=2 then 1 else 0 end) as 上报数 
 from TempTable 
 group by  '阶段 ' + FileType
------解决方案--------------------if object_id( 'pubs..tb ') is not null 
    drop table tb 
 go   
 create table tb(ID int,FileName varchar(20),FileType int,FileStatus int) 
 insert into tb(ID,FileName,FileType,FileStatus) values( 1,     '登记表 '      	,1,	1) 
 insert into tb(ID,FileName,FileType,FileStatus) values( 2,     '登记表 '    	,2,	2) 
 insert into tb(ID,FileName,FileType,FileStatus) values( 3,     '监督方案 '  	,1,	2) 
 insert into tb(ID,FileName,FileType,FileStatus) values( 4,     '安全培训记录 '	,3,	1) 
 insert into tb(ID,FileName,FileType,FileStatus) values( 5,     '安全培训记录 '	,1,	2) 
 insert into tb(ID,FileName,FileType,FileStatus) values( 6,     '专项方案1 '	,2,	2) 
 insert into tb(ID,FileName,FileType,FileStatus) values( 7,     '专项方案2	 '       ,2,	2) 
 insert into tb(ID,FileName,FileType,FileStatus) values( 8,     '专项方案2 '	,3,	2) 
 go   
 select a1.阶段 , a1.总数 , isnull(a2.新建数,0) 新建数 , isnull(a3.上报数 , 0) 上报数 from 
 (select  '阶段 ' + cast(filetype as varchar) as  '阶段 ', count(*) 总数 from tb group by filetype) a1 
 left join  
 (select  '阶段 ' + cast(filetype as varchar) as  '阶段 ' , count(*) 新建数 from tb where filestatus = 1 group by filetype) a2 
 on a1.阶段 = a2.阶段 
 left join 
 (select  '阶段 ' + cast(filetype as varchar) as  '阶段 ' , count(*) 上报数 from tb where filestatus = 2 group by filetype) a3 
 on a1.阶段 = a3.阶段   
 drop table tb 
 /* 
 阶段                                 总数      新建数      上报数          
 ---------------------------------- ----------- ----------- -----------  
 阶段1                                3           1           2 
 阶段2                                3           0           3 
 阶段3