分段统计查询的方法
来源:互联网 发布:淘宝网梳妆台 编辑:程序博客网 时间:2024/06/10 06:27
分段统计的方式主要有两种,一种如下要求:
有两个表:
1.成绩分段表(ID为自增列)
ID MaxFen MinFen
——————–
1 510 500
2 500 490
3 490 480
2.总成绩表
ClassID StudentID SumFen(总分)
————————————
000005 000001 503
000005 000003 498
000004 000006 487
000004 000003 501
3.班级表
ClassID ClassName
———————–
000004 104班
000005 105班
要求结果:
≥500 ≥490 ≥480
—————————————-
105班 1 1
104班 1 1
总分分段值是随机的,最多30个分段
即要求分段为横向显示:
方法:
– 示例数据
Create TABLE 成绩分段表(
ID int IDENTITY, MaxFen int, MinFen int)
Insert 成绩分段表
Select 510, 500 UNION ALL
Select 500, 490 UNION ALL
Select 490, 480
Create TABLE 总成绩表(
ClassID varchar(10), StudentID varchar(10), SumFen int)
Insert 总成绩表
Select ‘000005′, ‘000001′, 503 UNION ALL
Select ‘000005′, ‘000003′, 498 UNION ALL
Select ‘000004′, ‘000006′, 487 UNION ALL
Select ‘000004′, ‘000003′, 501
Create TABLE 班级表(
ClassID varchar(10), ClassName varchar(10))
Insert 班级表
Select ‘000004′, ‘104班’ UNION ALL
Select ‘000005′, ‘105班’
GO
– 查询
DECLARE @s nvarchar(4000)
SET @s = N”
Select @s = @s + N’,’
+ QUOTENAME(‘≥’ + RTRIM(MinFen))
+ N’=SUM(CASE WHEN B.SumFen>=’ + RTRIM(MinFen)
+ N’ AND SumFen<’ + RTRIM(MaxFen)
+ N’ THEN 1 END)’
FROM 成绩分段表
orDER BY ID
EXEC(N’
Select C.ClassName’ + @s + N’
FROM 班级表 C, 总成绩表 B
Where C.ClassID = B.ClassID
GROUP BY C.ClassName
‘)
GO
– 删除测试
Drop TABLE 成绩分段表, 总成绩表, 班级表
– 结果:
ClassName≥500≥490≥480
104班1NULL1
105班11NULL
第二种要求则要求纵向显示:
有一组数据如下
编号(id) 重量(weight)
1 20
2 15
3 5
4 60
5 12
6 33
7 45
8 59
9 89
10 110
现在想在程序里动态的按区间统计。
比如 在程序里选择10——50 之间间隔10的有多少个。
希望的结果:
10-20 4
20-30 2
30-40 1
40-50 1
这里区间10,50 和间隔10 ,都是可以动态设定的。
declare @t table(id int,weight int)
insert into @t select 1, 20
insert into @t select 2, 15
insert into @t select 3, 5
insert into @t select 4, 60
insert into @t select 5, 12
insert into @t select 6, 33
insert into @t select 7, 45
insert into @t select 8, 59
insert into @t select 9, 89
insert into @t select 10,110
declare @p int
set @p=10
select
rtrim(p*@p)+’-'+rtrim((p+1)*@p) as p,
num
from
(select (weight/@p) as p,count(*) as num from @t where weight between 10 and 50 group by (weight/@p)) a
/*
p num
————————- ———–
10-20 2
20-30 1
30-40 1
40-50 1
*/
- 分段统计查询的方法
- ACCESS JET SQL 分段或者交叉统计的查询语句怎么写?
- 统计Oracle 查询事务数的方法
- 用EXCEL统计分段数据的个数
- 分段查询
- oracle两个表连接的分段查询
- 表的分段查询 资料小总结
- sql 分段统计
- 汇编程序:成绩分段统计
- hibernate的统计查询
- 查询集的统计
- hibernate的统计查询
- 一个按五分钟分段统计的例
- Mathtype写分段函数的方法
- 关于SQL分段查询
- 分段查询通讯录数据表
- Oracle分段查询
- SQLServer时间分段查询
- 将数据从Excel导入到数据库中
- C++xml文件操作 CMarkup学习方法说明
- VC操作Excel文件编程相关内容总结
- 孤立用户
- C# DirectShow 操作视频播放功能
- 分段统计查询的方法
- 关于gethostname函数失败的问题
- cout溢出(怪异的现象)
- 惠普台式机必须按F1才能启动问题排查解决纪实
- 上拉、 下拉电阻的定义以及用法(转)
- 页面进度条
- EmuDebug支持断点(转)
- Log4Net使用指南
- 提交到新窗口submit-OR-window.open