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

推荐订阅源

人人都是产品经理
人人都是产品经理
Stack Overflow Blog
Stack Overflow Blog
S
SegmentFault 最新的问题
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏
U
Unit 42
GbyAI
GbyAI
B
Blog RSS Feed
博客园 - Franky
L
LangChain Blog
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 三生石上(FineUI控件)
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - 狂笑人生

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)