惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
M
MIT News - Artificial intelligence
Engineering at Meta
Engineering at Meta
云风的 BLOG
云风的 BLOG
博客园 - 叶小钗
Jina AI
Jina AI
Last Week in AI
Last Week in AI
The Cloudflare Blog
博客园 - 【当耐特】
Stack Overflow Blog
Stack Overflow Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
博客园_首页
I
InfoQ
G
Google Developers Blog
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
H
Help Net Security
U
Unit 42
Blog — PlanetScale
Blog — PlanetScale
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
IT之家
IT之家
Microsoft Security Blog
Microsoft Security Blog

博客园 - 狂笑人生

SQL SERVER 2008 开发系列(十五) SQL SERVER 2008 开发系列(十四) SQL SERVER 2008 开发系列(十三) SQL SERVER 2008 开发系列(十) SQL SERVER 2008 开发系列(十一) SQL SERVER 2008 开发系列(九) SQL SERVER 2008 开发系列(八) SQL SERVER 2008 开发系列(七) SQL SERVER 2008 开发系列(五) SQL SERVER 2008 开发系列(六) SQL SERVER 2008 开发系列(四) SQL SERVER 2008 开发系列(三) SQL SERVER 2008 开发系列(二) SQL SERVER 2008 开发系列(一)B SQL SERVER 2008 开发系列(一) 浅析逻辑数据映射[转载] 浅析实时ETL的架构选择[转载] 数据库性能优化 数据挖掘技术
SQL SERVER 2008 开发系列(十二)
狂笑人生 · 2008-09-16 · via 博客园 - 狂笑人生

T-SQL GROUPING SETS (新特性)

/*********************************************************
Author="WZ"
Create Date="2008/9/7"
SQL SERVER 2008 开发系列(十二)T-SQL GROUPING SETS (新特性)
**********************************************************/

/*********************************************************
第一章:目标
通过本节内容,了解T-SQL中的GROUP BY 的应用,主要包括以下:
1: CUBE
2: ROLLUP
3: GROUPING SETS
**********************************************************/

--本节以AdventureWorks数据库为示例
USE AdventureWorks
GO

--普通的聚合查询
SELECT
    DATEPART(yyyy,OrderDate) AS N'Year',
    DATEPART(mm, OrderDate) AS 'Month',
    SUM(TotalDue) AS N'Total Order Amount'
FROM Sales.SalesOrderHeader
GROUP BY DATEPART(yyyy,OrderDate), DATEPART(mm, OrderDate)
ORDER BY DATEPART(yyyy,OrderDate), DATEPART(mm, OrderDate)

--ROLLUP 的聚合查询
SELECT
    DATEPART(yyyy,OrderDate) AS N'Year',
    DATEPART(mm, OrderDate) AS 'Month',
    SUM(TotalDue) AS N'Total Order Amount'
FROM Sales.SalesOrderHeader
GROUP BY ROLLUP((DATEPART(yyyy,OrderDate)), (DATEPART(mm, OrderDate))) --标准语法
ORDER BY DATEPART(yyyy,OrderDate), DATEPART(mm, OrderDate)

--如何通过GROUPING SETS 替换ROLLUP查询
SELECT
    DATEPART(yyyy,OrderDate) AS N'Year',
    DATEPART(mm, OrderDate) AS 'Month',
    SUM(TotalDue) AS N'Total Order Amount'
FROM Sales.SalesOrderHeader
GROUP BY GROUPING SETS(
                        DATEPART(yyyy,OrderDate),
                        (DATEPART(yyyy,OrderDate),
                        DATEPART(mm, OrderDate))
                      ) --标准GROUPING SETS语法
ORDER BY DATEPART(yyyy,OrderDate), DATEPART(mm, OrderDate)

--CUBE 的查询
SELECT
    DATEPART(yyyy,OrderDate) AS N'Year',
    DATEPART(mm, OrderDate) AS 'Month',
    SUM(TotalDue) AS N'Total Order Amount'
FROM Sales.SalesOrderHeader
GROUP BY CUBE((DATEPART(yyyy,OrderDate)), (DATEPART(mm, OrderDate)))
ORDER BY DATEPART(yyyy,OrderDate), DATEPART(mm, OrderDate)

--使用 GROUPING SET 替换 CUBE 查询
SELECT
    DATEPART(yyyy,OrderDate) AS N'Year',
    DATEPART(mm, OrderDate) AS 'Month',
    SUM(TotalDue) AS N'Total Order Amount'
FROM Sales.SalesOrderHeader
GROUP BY GROUPING SETS(    (),
                        DATEPART(mm, OrderDate),
                        DATEPART(yyyy,OrderDate),
                        (DATEPART(yyyy,OrderDate), DATEPART(mm, OrderDate))
                      )
ORDER BY DATEPART(yyyy,OrderDate), DATEPART(mm, OrderDate)