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

SQL Server 2005生成直方图简介

 2007-05-15 09:33:00 来源:WEB开发网   
核心提示: DECLARE @numsteps int, @measidint, @fromdt datetime, @todtdatetimeSELECT @numsteps=5, @measid=1,@fromdt='20030101', @todt='20030102&#

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 所示。该查询对每个等级号返回相同的常规最小度量值和最大度量值。这只是该解决方案中的中间结果;稍后您会将常规最小值和最大值与等级号一起使用,以便计算等级的最小值和最大值。

上一页  1 2 3 4  下一页

Tags:SQL Server 生成

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