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

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
J
Java Code Geeks
C
Check Point Blog
Last Week in AI
Last Week in AI
Microsoft Azure Blog
Microsoft Azure Blog
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
L
LangChain Blog
有赞技术团队
有赞技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 司徒正美
IT之家
IT之家
Martin Fowler
Martin Fowler
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
U
Unit 42
Jina AI
Jina AI
Microsoft Security Blog
Microsoft Security Blog
I
InfoQ

博客园 - 狂笑人生

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)