SQL Server 2005生成直方图简介
2007-05-15 09:33:00 来源:WEB开发网SELECT step, count(*) AS cnt
FROM Samples JOIN () AS Steps
ON value > f AND value = @fromdt AND dt
如果您像我一样喜欢使用模块化的开发方法来简化代码及其维护,则可以编写一个用户定义函数 (UDF),该函数将等级数、度量 ID 和日期范围作为参数,并返回表 Steps。运行 清单 6 显示的代码来创建 fn_steps 函数。
要测试该函数,请运行下面的代码:
SELECT * FROM fn_steps(1, 5, '20030101', '20030102')
现在,您可以使用 fn_steps 表,而不是派生表 Steps,如 清单 7 中的代码所示。
解决方案 2:实时计算等级号
这个难题还有另一个解决方案,该方案不生成等级表,而是实时计算等级号。利用此解决方案时,您无需使用等级号辅助表。请注意 清单 8 (第 18 页)的标注 A 中的 FROM 子句。您将交叉连接两个派生表 — 一个表名为 S,包含来自 Samples 的、与提供的参数相匹配的行,另一个表名为 R,包含最小度量值和整个范围的大小。下面的表达式(在 SELECT 列表中进行编写)用于计算等级号:
floor((value-mn) / (1.0*range/@numsteps)) + 1
AS step
此表达式使用的逻辑与您在前面的解决方案中用于计算上限和下限的逻辑很相似。表达式 (value-mn) 可计算出值在范围内的位置,而 (1.0*range/@numsteps) 可计算出等级大小。用第二个操作数除以第一个操作数,在结果的基础上再加上 1,就可以得出等级号。既然您已经向每行附加了一个等级号(匹配来自 Samples 表的条件),那么您就可以在名为 RS 的派生表中使用此查询,从而能够按计算出的等级号对结果进行分组。清单 8 显示了完整的解决方案,在该解决方案中,外部查询按等级号对结果进行分组,并计算每个等级的行数。
- ››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表' (数...
更多精彩
赞助商链接