SQL Server数据库PIVOT函数的使用详解(一)

http://database.51cto.com/art/201108/285250.htm

SQL Server数据库中,PIVOT在帮助中这样描述滴:可以使用 PIVOT 和UNPIVOT 关系运算符将表值表达式更改为另一个表。PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值。

测试用的数据及表结构:

CREATE TABLE ShoppingCart(  [Week] INT NOT NULL,  [TotalPrice] DECIMAL DEFAULT(0) NOT NULL  )  
INSERT INTO ShoppingCart([Week],[TotalPrice])  
SELECT 1,10 UNION ALL  
SELECT 2,20 UNION ALL  
SELECT 3,30 UNION ALL  
SELECT 4,40 UNION ALL  
SELECT 5,50 UNION ALL  
SELECT 6,60 UNION ALL  
SELECT 7,70  
SELECT * FROM ShoppingCart 

 

输出结果:

SQL Server数据库PIVOT函数的使用详解

来看下PIVOT怎么把行变列:

SELECT 
     'TotalPrice' AS [Week],[1],[2],[3],[4],[5],[6],[7]  
FROM 
    ShoppingCart
     PIVOT(SUM(TotalPrice) FOR [Week] IN([1],[2],[3],[4],[5],[6],[7])) AS T 

 

输出结果:

SQL Server数据库PIVOT函数的使用详解

可以看出来,转换完成了,就这么个功能。再看一个UNPIVOT函数,与上述功能相反,把列转成行。我们直接使用WITH关键字把上述PIVOT查询当成源表,然后再使用UNPIVOT关键把它旋转回原来的模样,SQL脚本及结果如下:

WITH P AS (  
    SELECT 
        'TotalPrice' AS [Week],[1],[2],[3],[4],[5],[6],[7]  
    FROM 
        ShoppingCart 
    PIVOT
        (
            SUM(TotalPrice) FOR [Week] IN([1],[2],[3],[4],[5],[6],[7])
        )   
AS T)  

SELECT  
  [WeekDay] AS [Week], [WeekPrice] AS [TotalPrice] FROM
  P UNPIVOT
(   [WeekPrice] FOR [WeekDay] IN([
1],[2],[3],[4],[5],[6],[7])
)AS FOO

 

SQL Server数据库PIVOT函数的使用详解

关于SQL Server数据库PIVOT函数的使用的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!

这些是静态的行转列,动态的行转列将在下一节。

转载于:https://www.cnblogs.com/sheseido/p/3554620.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值