使用SQL Server 2008 GROUP BY新特性更好地控制数据(上)

日期: 2009-06-02 作者:Robert Sheldon翻译:冯昀晖 来源:TechTarget中国 英文

SQL Server 2008为T-SQL(微软对SQL的扩展)语句提供了一些新特性。其中之一就是为Select语句Group by从句提供了GROUPING SETS选项。与ROLLUP和CUBE选项相比,GROUPING SETS对于数据怎样分组计算信息提供了更加良好的控制。   在理解怎样使用GROUPING SETS之前,让我们先回顾一下GROUP BY从句的用法。

毫无疑问,你一定知道GROUP BY从句可以把数据分组,按分组合计分类数据。例如:下面的Select语句就使用了GROUP BY从句从AdventureWorks2008数据库合计数据。 SELECT Territ……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

SQL Server 2008为T-SQL(微软对SQL的扩展)语句提供了一些新特性。其中之一就是为Select语句Group by从句提供了GROUPING SETS选项。与ROLLUP和CUBE选项相比,GROUPING SETS对于数据怎样分组计算信息提供了更加良好的控制。

  在理解怎样使用GROUPING SETS之前,让我们先回顾一下GROUP BY从句的用法。毫无疑问,你一定知道GROUP BY从句可以把数据分组,按分组合计分类数据。例如:下面的Select语句就使用了GROUP BY从句从AdventureWorks2008数据库合计数据。


SELECT TerritoryName, LastName, SUM(SalesYTD) AS YTDSales
FROM Sales.vSalesPerson
WHERE (CountryRegionName = 'United States') AND (SalesYTD > 3000000) 
GROUP BY TerritoryName, LastName
ORDER BY TerritoryName, LastName

  这句查询语句从vSalesPerson视图查询数据,并按列TerritoryName和列LastName进行了分组。对每一分组,SQL中使用了SUM求和函数累加合计值到列SalesYTD,显示总销售量。下表显示了查询结果,你可以看到合计是按各区域和名称一起分组进行计算的。

  使用SQL Server 2008 GROUP BY新特性更好地控制数据(图一)

  尽管这些信息很有用,但它没有提供所有区域的总销售量,或者各区域的总销售量。要获取这类数据,你可以使用ROLLUP选项计算另外的合计。请看下面的SQL例子:


SELECT TerritoryName, LastName, SUM(SalesYTD) AS YTDSales
FROM Sales.vSalesPerson
WHERE (CountryRegionName = 'United States') AND (SalesYTD > 3000000) 
GROUP BY ROLLUP (TerritoryName, LastName) 
ORDER BY TerritoryName, LastName

  要注意ROLLUP选项中指定了列TerritoryName和列LastName。因为查询显示列中包括了这两列,所以查询结果会包含所有按区域和名字分组区分的统计。另外,查询结果还包括所有区域销售量合计和各区域各自销售量合计。如下表:

  使用SQL Server 2008 GROUP BY新特性更好地控制数据(图二)

  如果不用ROLLUP,而使用CUBE选项,你可以得到另外的合计数据,请看下面的Select语句:


SELECT TerritoryName, LastName, SUM(SalesYTD) AS YTDSales
FROM Sales.vSalesPerson
WHERE (CountryRegionName = 'United States') AND (SalesYTD > 3000000) 
GROUP BY CUBE (TerritoryName, LastName) 
ORDER BY TerritoryName, LastName

相关推荐