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

推荐订阅源

Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
Engineering at Meta
Engineering at Meta
Stack Overflow Blog
Stack Overflow Blog
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
I
InfoQ
B
Blog
WordPress大学
WordPress大学
Jina AI
Jina AI
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
Google Developers Blog
C
Check Point Blog
月光博客
月光博客
L
LangChain Blog
GbyAI
GbyAI

博客园 - 狂笑人生

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)