WEB开发网
开发学院数据库MSSQL Server SQL Server 2005生成直方图简介 阅读

SQL Server 2005生成直方图简介

 2007-05-15 09:33:00 来源:WEB开发网   
核心提示: 现在,您需要用返回的表达式替换 SELECT 列表中的星号,SQL Server 2005生成直方图简介(3),此外,还需要替换等级号以及等级范围的下限(不包括)和上限(包括),请记住,返回等级表的查询只是该解决方案的一部分,等级号很简单,是 n

现在,您需要用返回的表达式替换 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 相同。

请随便试用此解决方案的代码中的参数,以便测试一下更改等级数对结果会有什么影响,等等。请记住,返回等级表的查询只是该解决方案的一部分。现在,您可以在下面的伪代码中看到缺少的、被表示为 的查询部分:

上一页  1 2 3 4  下一页

Tags:SQL Server 生成

编辑录入:coldstar [复制链接] [打 印]
赞助商链接