bsp;0 1 0 0 王五 初一3班 数学 80 0 0 1 0 王五 初一3班 英语 50 1 0 0 0 周天 初一3班 数学 100 0 0 0 1 李小 初一2班 语文 99 0 0 0 1 李小 初一2班 物理 100 0 0 0 1
但是如果需要得到合计人数怎么办?直接用 SELECT ... GROUP BY 语句就可以做到
select 班级,科目,SUM(分数) as 总分,sum(不及格人次),sum(60到80分人次),sum(80到90分人次),sum(90到100分人次) from ([刚才的执行结果]) group by 班级,科目
即可,好了,我们将刚才的 SQL 语句替换进去可以得到
select 班级,科目,SUM(分数) as 总分,sum(不及格人次),sum(60到80分人次),sum(80到90分人次),sum(90到100分人次) from (select 姓名,班级,科目,分数,1 as 不及格人次,0 as 60到80分人次,0 as 80到90分人次,0 as 90到100分人次 from 表 where 分数< 60 union all select 姓名,班级,科目,分数,0 as 不及格人次,1 as 60到80分人次,0 as 80到90分人次,0 as 90到100分人次 from 表 where 分数>=60 and 分数< 80 union all select 姓名,班级,科目,分数,0 as 不及格人次,0 as 60到80分人次,1 as 80到90分人次,0 as 90到100分人次 from 表 where 分数>=80 and 分数< 90 union all select 姓名,班级,科目,分数,0 as 不及格人次,0 as 60到80分人次,0 as 80到90分人次,1 as 90到100分人次 from 表 where 分数>=90 and 分数<=100 ) group by 班级,科目
问题:
查询一个字段中值分别0-3,3-6,6-15,15-30,>30的记录的个数怎么做?
回答:
非常简单,你要做的只是写不同的WHERE 子句,然后将他们组合起来而已。用 ASNI SQL 就可以做到。
select 呼叫 as 小于3,0 as 大于3小于6,0 as 大于6小于15,0 as 大于15小于30,0 as 大于30 from where 时长<3
union all
select 0 小于3,呼叫 as 大于3小于6,0 as 大于6小于15,0 as 大于15小于30,0 as 大于30 from where 时长>3 and 时长<6
union all ....
一直持续下去
如果你要汇总只要写一个 sum语句即可
select sum(小于3),sum(大于3小于6),sum(大于6小于15),sum(大于15小于30),sum( 大于30 ) from (
select 呼叫 as 小于3,0 as 大于3小于6,0 as 大于6小于15,0 as 大于15小于30,0 as 大于30 from where 时长<3
union all
select 0 小于3,呼叫 as 大于3小于6,0 as 大于6小于15,0 as 大于15小于30,0 as 大于30 from where 时长>3 and 时长<6
union all ....)
太复杂了吧,有没有简单点的,用IIF什么的? 回答上述问题:请注意!用 IIF 才是最复杂的,因为它涉及到 JET DB / ACCESS JET SQL /VBA 三方面!而用 UNION ALL 只涉及到 SQL,该语句通用性非常强
上一页 [1] [2] |