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

pingo888 2007-04-12 11:44:44
有一张表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
__________________________________
...全文
218 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pingo888 2007-04-13
  • 打赏
  • 举报
回复
谢谢各位
lin_now 2007-04-13
  • 打赏
  • 举报
回复
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
dawugui 2007-04-13
  • 打赏
  • 举报
回复
那你把标志在数据库中直接改为阶段1...
OracleRoob 2007-04-13
  • 打赏
  • 举报
回复
只要FileType 固定为1、2、3,统计的结果就和你要求的一样。
pingo888 2007-04-13
  • 打赏
  • 举报
回复
感谢各位大侠了。

补充一下,阶段是固定的3个阶段,例如为 阶段1、阶段2、阶段3

并且在统计结果的结构必然为
阶段1 ** ** **
阶段2 ** ** **
阶段3 ** ** **

所以不想使用类似“ '阶段' + FileType as 阶段 ” 这样的
OracleRoob 2007-04-12
  • 打赏
  • 举报
回复

--直接用case when即可,方法最简单

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


/*

阶段 总数 新建数 上报数

阶段1 3 1 2
阶段2 3 0 3
阶段3 2 1 1

*/
dawugui 2007-04-12
  • 打赏
  • 举报
回复
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 行)
*/
dawugui 2007-04-12
  • 打赏
  • 举报
回复
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 行)
*/
OracleRoob 2007-04-12
  • 打赏
  • 举报
回复
--select * from TempTable



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


/*

阶段 总数 新建数 上报数

阶段1 3 1 2
阶段2 3 0 3
阶段3 2 1 1

*/
OracleRoob 2007-04-12
  • 打赏
  • 举报
回复
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

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧