zoukankan      html  css  js  c++  java
  • 使用 PIVOT 和 UNPIVOT实现行转列,列转行

    PIVOT 提供的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单和更具可读性。

    以下是带批注的 PIVOT 语法。

    SELECT <非透视的列>,

        [第一个透视的列] AS <列名称>,

        [第二个透视的列] AS <列名称>,

        ...

        [最后一个透视的列] AS <列名称>,

    FROM

        (<生成数据的 SELECT 查询>)

        AS <源查询的别名>

    PIVOT

    (

        <聚合函数>(<要聚合的列>)

    FOR

    [<包含要成为列标题的值的列>]

        IN ( [第一个透视的列], [第二个透视的列],

        ... [最后一个透视的列])

    ) AS <透视表的别名>

    <可选的 ORDER BY 子句>;

    举个简单的例子

    USE AdventureWorks2008R2;
    GO
    SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5
    FROM
    (SELECT PurchaseOrderID, EmployeeID, VendorID
    FROM Purchasing.PurchaseOrderHeader) p
    PIVOT
    (
    COUNT (PurchaseOrderID)
    FOR EmployeeID IN
    ( [250], [251], [256], [257], [260] )
    ) AS pvt
    ORDER BY pvt.VendorID;
    以下为部分结果集 

    VendorID    Emp1        Emp2        Emp3        Emp4        Emp5

    1492        2           5           4           4           4

    1494        2           5           4           5           4

    1496        2           4           4           5           5

    1498        2           5           4           4           4

    1500        3           4           4           5           4

    将在 EmployeeID 列上透视此嵌套 select 语句返回的结果。

    该函数可以方便实现行列之间的转行。

    
  • 相关阅读:
    bzoj3167 [Heoi2013]Sao
    51Nod1220 约数之和
    THUSC2017 游记
    基于线性代数的一般图匹配
    COGS2608 [河南省队2016]无根树
    CTSC2017 & APIO2017 游记
    cef GeneralUsage
    CefApp和CefClient的作用
    cef源码分析之cefsimple
    【chromium】cef是如何进行版本控制的?
  • 原文地址:https://www.cnblogs.com/cenyuxin/p/1956417.html
Copyright © 2011-2022 走看看