读书人

高送分求一SQL语句出结果即结帖,该怎

发布时间: 2012-04-11 17:42:33 作者: rapoo

高送分求一SQL语句,出结果即结帖
有一张表TempTable,表结构及内容如下
_______________________________________
ID FileName FileType FileStatus
1 登记表 11
2 登记表 22
3 监督方案 12
4 安全培训记录31
5 安全培训记录12
6 专项方案122
7 专项方案222
8 专项方案232
________________________________________
说明: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 2 1 1



(所影响的行数为 3 行)
*/
[解决办法]
select
( case filetype when 1 then '阶段1 ' when 2 then '阶段2 ' else '阶段3 ' end) 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 test
group by filetype

读书人网 >SQL Server

热点推荐