SQL Server 2005生成直方图简介
2007-05-15 09:33:00 来源:WEB开发网DECLARE @numsteps int, @measid
int, @fromdt datetime, @todt
datetime
SELECT @numsteps=5, @measid=1,
@fromdt='20030101', @todt='20030102'
在 Samples 表中,在给定期间内,measid 1 的最小度量值是 26,最大度量值是 50。在 @numsteps 参数中请求的等级数为 5。首先,您需要计算五个等级内各范围的下限和上限。因为范围的下限不包括在内,所以经过计算可得到以下范围:25 到 30、30 到 35、35 到 40、40 到 45、45 到 50。
您需要编写能告诉您每个等级有多少度量的代码 — 在本例中,您的代码应产生与等级 1 相匹配的一个度量 (26)、与等级 2 相匹配的两个度量(33、35)以及与等级 5 相匹配的两个度量(47、50)。 以下是我针对此问题提供的一些解决方案。
解决方案 1:使用等级表
第一个解决方案涉及到编写一个生成派生表 Steps 的查询,该表包含等级号和每个等级的值的范围。生成这样一个表后,该解决方案就显得简单了。您需要完成的操作是:根据属于等级范围内的 value 列将派生表 Steps 联接到 Samples 表、根据等级号对结果进行分组、计算每组内的行数。这个解决方案中比较困难的地方就是编写生成派生表的查询。要生成等级号,可以使用一个名为 Nums 的辅助表,在该表中填充有一个范围为 1 到 的整数序列。运行 清单 2 中的脚本可创建 Nums 辅助表,并向其中填充 1000 个整数。
要计算每个等级范围的下限和上限,需要交叉连接两个查询的结果:一个是针对 Nums 的查询,以返回等级号,另一个是针对 Samples 的查询,以返回最小度量值和最大度量值。产生的查询可能如 清单3 所示。该查询对每个等级号返回相同的常规最小度量值和最大度量值。这只是该解决方案中的中间结果;稍后您会将常规最小值和最大值与等级号一起使用,以便计算等级的最小值和最大值。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接