求一高效SQl

grayhoundd 2010-12-29 01:42:48
获取一张表中符合条件总记录数,和,字段status值为"normal","late"的数据总条数、百分比,要求在一行中显示


lbob 1 NULL
lbob 0 NULL
Xu 0 Normal
Xu 1 NULL
lbob 1 NULL
gyi 1 NULL
lbob 0 NULL
Tim 1 Normal
Jock 1 Normal
Nick 0 Normal
Tim 1 Normal
Jock 1 Normal
Nick 0 Normal
lbob 0 NULL
lbob 1 NULL
lbob 0 NULL
lbob 0 NULL
lbob 0 NULL
lbob 1 NULL
lbob 1 NULL
lbob 0 NULL
lbob 0 NULL
lbob 1 Normal
Xu 1 Absent
lbob 0 NULL
lbob 1 Late
Xu 0 Absent
lbob 1 NULL
gyi 0 NULL

应返回:9(Normal、Late条数)、25(总条数)、32%
...全文
158 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2010-12-30
  • 打赏
  • 举报
回复
create table tb(name varchar(10), type int, status varchar(10))
insert into tb values('lbob' ,1 ,NULL)
insert into tb values('lbob' ,0 ,NULL)
insert into tb values('Xu ' ,0 ,'Normal')
insert into tb values('Xu ' ,1 ,NULL)
insert into tb values('lbob' ,1 ,NULL)
insert into tb values('gyi ' ,1 ,NULL)
insert into tb values('lbob' ,0 ,NULL)
insert into tb values('Tim ' ,1 ,'Normal')
insert into tb values('Jock' ,1 ,'Normal')
insert into tb values('Nick' ,0 ,'Normal')
insert into tb values('Tim ' ,1 ,'Normal')
insert into tb values('Jock' ,1 ,'Normal')
insert into tb values('Nick' ,0 ,'Normal')
insert into tb values('lbob' ,0 ,NULL)
insert into tb values('lbob' ,1 ,NULL)
insert into tb values('lbob' ,0 ,NULL)
insert into tb values('lbob' ,0 ,NULL)
insert into tb values('lbob' ,0 ,NULL)
insert into tb values('lbob' ,1 ,NULL)
insert into tb values('lbob' ,1 ,NULL)
insert into tb values('lbob' ,0 ,NULL)
insert into tb values('lbob' ,0 ,NULL)
insert into tb values('lbob' ,1 ,'Normal')
insert into tb values('Xu ' ,1 ,'Absent')
insert into tb values('lbob' ,0 ,NULL)
insert into tb values('lbob' ,1 ,'Late')
insert into tb values('Xu ' ,0 ,'Absent')
insert into tb values('lbob' ,1 ,NULL)
insert into tb values('gyi ' ,0 ,NULL)
go

select
[Normal、Late条数] = (select count(1) from tb where status = 'Normal' or status = 'Late'),
[总条数] = (select count(1) from tb),
[百分比] = cast((select count(1) from tb where status = 'Normal' or status = 'Late')*100.0/(select count(1) from tb) as decimal(18,2))

drop table tb

/*
Normal、Late条数 总条数 百分比
------------- ----------- --------------------
9 29 31.03

(所影响的行数为 1 行)
*/
龙马 2010-12-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 josy 的回复:]

SQL code
select
sum(case when status in('Normal','Late') then 1 else 0 end) as [Normal、Late条数],
count(1)总条数,
ltrim(sum(case when status in('Normal','Late') then 1 else 0 end)*100/count(1))+'%……
[/Quote]
百年树人 2010-12-29
  • 打赏
  • 举报
回复
select 
sum(case when status in('Normal','Late') then 1 else 0 end) as [Normal、Late条数],
count(1)总条数,
ltrim(sum(case when status in('Normal','Late') then 1 else 0 end)*100/count(1))+'%'
from
tb
where xxx

水族杰纶 2010-12-29
  • 打赏
  • 举报
回复
总条数不对吧
水族杰纶 2010-12-29
  • 打赏
  • 举报
回复
select sum(case when status='Normal' then 1 else 0 end)Normal条数,
sum(case when status='Late' then 1 else 0 end)Late条数,
count(*)总条数
from tb


34,587

社区成员

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

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