高送分求一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