开发者社区> 孤独的猫董> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

SQL SERVER 2008的转置函数PIVOT

简介: PIVOT函数用于转置数据,即用旋转表的方式把行换成列。PIVOT可以将表中的列换成行 如下面的例子: CREATE TABLE Sales.SalesByMonth ( year char(4), month char(3), amount MONEY, ...
+关注继续查看

PIVOT函数用于转置数据,即用旋转表的方式把行换成列。PIVOT可以将表中的列换成行

如下面的例子:

CREATE TABLE Sales.SalesByMonth
(
    year char(4),
    month char(3),
    amount MONEY,
    PRIMARY KEY(year,month)
)

INSERT INTO Sales.SalesByMonth(year,month,amount)
values('2007','Jan',789.0000),
      ('2007','Feb',389.0000),
      ('2007','Mar',8867.0000),
      ('2007','Apr',778.0000),
      ('2007','May',78.0000),
      ('2007','Jun',9.0000),
      ('2007','Jul',987.0000),
      ('2007','Aug',866.0000),
      ('2007','Sep',7787.0000),
      ('2007','Oct',85576.0000),
      ('2007','Nov',855.0000),
      ('2007','Dec',5875.0000),
      
      ('2008','Jan',7.0000),
      ('2008','Feb',6868.0000),
      ('2008','Mar',688.0000),
      ('2008','Apr',9897.0000)
      
SELECT YEAR,
       SUM(case when month='Jan' then amount else 0 end) as 'Jan',
       SUM(case when month='Feb' then amount else 0 end) as 'Feb',
       SUM(case when month='Mar' then amount else 0 end) as 'Mar',
       SUM(case when month='Apr' then amount else 0 end) as 'Apr',
       SUM(case when month='May' then amount else 0 end) as 'May',
       SUM(case when month='Jun' then amount else 0 end) as 'Jun',
       SUM(case when month='Jul' then amount else 0 end) as 'Jul',
       SUM(case when month='Aug' then amount else 0 end) as 'Aug',
       SUM(case when month='Sep' then amount else 0 end) as 'Sep',
       SUM(case when month='Oct' then amount else 0 end) as 'Oct',
       SUM(case when month='Nov' then amount else 0 end) as 'Nov',
       SUM(case when month='Dec' then amount else 0 end) as 'Dec'
FROM Sales.SalesByMonth 
group by year     

select YEAR,[Jan],[Feb],[Mar],[Apr],[May],[Jun],
            [Jul],[Aug],[Sep],[Oct],[Nov],[Dec]
FROM 
    (Select YEAR,amount,month from Sales.SalesByMonth) as SalesByMonth 
    pivot (sum(amount) for month in 
            (
                [Jan],[Feb],[Mar],[Apr],[May],[Jun],
                [Jul],[Aug],[Sep],[Oct],[Nov],[Dec]
            )) as ourPivot
order by year

显示结果为:

如果去掉year选项,语句改为:

select [Jan],[Feb],[Mar],[Apr],[May],[Jun],
            [Jul],[Aug],[Sep],[Oct],[Nov],[Dec]
FROM 
    (Select amount,month from Sales.SalesByMonth) as SalesByMonth 
    pivot (sum(amount) for month in 
            (
                [Jan],[Feb],[Mar],[Apr],[May],[Jun],
                [Jul],[Aug],[Sep],[Oct],[Nov],[Dec]
            )) as ourPivot

则显示结果:

 

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Hive】函数 instr 的用法
【Hive】函数 instr 的用法
71 0
《重学Java高并发》disruptor是如何做到百万级吞吐?
《重学Java高并发》disruptor是如何做到百万级吞吐?
32 0
error: LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const * __cdecl
error: LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const * __cdecl
490 0
Vertica的这些事<六>—— SQL Server、Oracle、MySQL和Vertica数据库常用函数对比
SQL Server、Oracle、MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库。 绝对值 S:select abs(-1) value O:select abs(-1) value from dual M:select abs(-1) value from dual V:select abs(-1)
2331 0
VS2008查看dll导出函数
打开Visual Studio 2008 命令提示,使用命令 [plain] view plaincopyprint? dumpbin /exports simple.dll   即可查看
786 0
SQL SERVER 2008排序函数(窗口函数)
排序函数可以用来协助给结果集增加位置信息。SQL SERVER 2008只有四个排序函数,介绍如下: ROW_NUMBER:返回结果集中给定行的序号RANK:基于给定行集合的选择顺序,给出行的位置。如有一些值连在一起,位置间有空隙     如两个值在第一位,然后下一个值将在第三位DENSE_RANK:同RANK一样,但没有在顺序中留下空隙。
868 0
742
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载