各位大侠:
请问:
有一个数据表中的信息怎么实现统计
info表格结构如下: 身份证 班级 是否标记
111 a班 是
222 a班 是
333 b班 是
444 b班 否查询info表格中各班标记为“是”的总数,和 "否"标记的总数,实现结果如下:
是 否 班级
2 0 a班
1 1 b班怎么用SQL 语句完成,谢谢了
请问:
有一个数据表中的信息怎么实现统计
info表格结构如下: 身份证 班级 是否标记
111 a班 是
222 a班 是
333 b班 是
444 b班 否查询info表格中各班标记为“是”的总数,和 "否"标记的总数,实现结果如下:
是 否 班级
2 0 a班
1 1 b班怎么用SQL 语句完成,谢谢了
sum(case when 是否标记 = '否' then 1 else 0 end) [否],
班级
from tb
group by 班级
insert into tb values('111', 'a班', '是')
insert into tb values('222', 'a班', '是')
insert into tb values('333', 'b班', '是')
insert into tb values('444', 'b班', '否')
goselect sum(case when 是否标记 = '是' then 1 else 0 end) [是],
sum(case when 是否标记 = '否' then 1 else 0 end) [否],
班级
from tb
group by 班级drop table tb/*是 否 班级
----------- ----------- ----------
2 0 a班
1 1 b班(所影响的行数为 2 行)
*/
在上面的表中,如果要从身份证信息中取出省份,用SQL能实现吗?
比如:
身份证 班级 是否标记
111 a班 是
222 a班 是
333 b班 是
444 b班 否
按下面输出结果:
省份 班级 记录数
黑龙江 a班 1
安徽 a班 1
江西 b班 2
谢谢了
身份证 省份名称
11 黑龙江
22 安徽
33 江西
44 广东select m.省份名称 , n.班级 , count(1) 记录数
from 省份对应表 m , tb n
where m.身份证 = left(n.身份证,2)
group by m.省份名称 , n.班级
select m.省份名称 , n.班级 ,
sum(case when n.是否标记 = '是' then 1 else 0 end) [是],
sum(case when n.是否标记 = '否' then 1 else 0 end) [否],
count(1) 总数
from 省份对应表 m , tb n
where m.身份证 = left(n.身份证,2)
group by m.省份名称 , n.班级
if (object_id('info')) is not null
drop table info
go
create table info(
身份证 varchar(20),
班级 varchar(20),
标记 nchar(4)
)
go
insert info(身份证,班级,标记)
select '111','a班','是' union all
select '222','a班','是' union all
select '333','b班','是' union all
select '444','b班','是'
select 班级,sum(case when 标记='是' then 1 else 0 end )as 是,
sum(case when 标记='否' then 1 else 0 end )as 否
from info
group by 班级