首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-04-11 
高送分求一SQL语句,出结果即结帖有一张表TempTable,表结构及内容如下___________________________________

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

热点排行