zoukankan      html  css  js  c++  java
  • 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函数的使用的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!

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

  • 相关阅读:
    Qt类继承关系图
    回归Qt——写在Qt5.10发布之日
    Jdk1.7下的HashMap源码分析
    Jdk1.8下的HashMap源码分析
    八皇后||算法
    设计模式之一单例模式
    多线程之美8一 AbstractQueuedSynchronizer源码分析<二>
    多线程之美7一ReentrantReadWriteLock源码分析
    多线程之美6一CAS与自旋锁
    多线程之美5一 AbstractQueuedSynchronizer源码分析<一>
  • 原文地址:https://www.cnblogs.com/sheseido/p/3554620.html
Copyright © 2011-2022 走看看