SQL Server 2005生成直方图简介
2007-05-15 09:33:00 来源:WEB开发网现在,您需要用返回的表达式替换 SELECT 列表中的星号,此外,还需要替换等级号以及等级范围的下限(不包括)和上限(包括)。等级号很简单,是 n。
以下代码是构建计算下限的表达式的基础:
mn + *(n-1) - 1
其中,mn 是常规最小度量值,n 是等级号,step_size 是每个等级所覆盖范围的大小。用于计算 step_size 的表达式如下所示:
(mx-mn+1)/@numsteps
通过将这两个表达式结合在一起,您可以得到
mn + (mx-mn+1)/@numsteps*(n-1) - 1
如果您得到的值范围总是能用等级数来整除,那么,使用上面这个表达式就可以了,但在实际应用中,情况却并不总是如此。下面的表达式使用数值除法和舍入法,适用于不能用等级数整除的值范围:
mn + CAST(round(1.0*(mx-mn+1)/@numsteps*(n-1), 0) AS int) - 1
您可以通过将除法运算的第一个操作数与数值 1.0(读法是一点零)相乘来进行分数除法(而非整数除法),这意味着 SQL Server 不会截断小数部分。然后,您需要对结果进行舍入,以便得到整个范围的上限和下限。之后,SQL Server 将经过舍入的结果转换为整数,以便去掉小数点后没有意义的零。您可以用相似的方式来计算上限:
mn + CAST(round(1.0*
(mx-mn+1)/@numsteps*n, 0)
AS int) - 1
上述表达式与前面的表达式之间的唯一区别是它将等级大小与等级号 (n) 相乘,而不是与 n-1 相乘。要测试计算派生的 Steps 表的完整查询,请运行 清单 4 中的代码;请注意,得到的结果与图 1 相同。
请随便试用此解决方案的代码中的参数,以便测试一下更改等级数对结果会有什么影响,等等。请记住,返回等级表的查询只是该解决方案的一部分。现在,您可以在下面的伪代码中看到缺少的、被表示为 的查询部分:
- ››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表' (数...
更多精彩
赞助商链接