zoukankan      html  css  js  c++  java
  • 透视转换

    透视数据(pivoting)是一种把数据从行的状态旋转为列的状态的处理,在这个过程中可能需要对值进行聚合。

    每个透视转换将涉及三个逻辑处理阶段,每个阶段都有相关的元素:分组阶段处理相关的分组或行元素,扩展(spreading)阶段处理相关的扩展或列元素,聚合阶段处理相关的聚合元素和聚合函数。总之,透视转换涉及分组、扩展及聚合三个阶段。

    使用标准SQL 进行透视转换

    SELECT empid

      SUM(CASE WHEN custid='A' THEN qty END) AS A,

      SUM(CASE WHEN custid='B' THEN qty END) AS B

    FROM dbo.Orders

    GROUP BY empid;

    使用 T-SQL PIVOT 运算符进行透视转换

    SQL Server 2005 引入了一个T-SQL 特有的表运算符——PIVOT,和其他表运算符(如,JOIN )类似,PIVOT 运算符也是在查询的FROM子句的上下文中操作。它对某个源表或表表达式进行操作、透视数据,再返回一个结果表。PIVOT 运算符同样涉及前面介绍的三个逻辑处理阶段(分组、扩展及聚合)和同样的透视转换元素,但使用的是不同的、SQL Server原生的(native)的语法。

    注意:对于PIVOT去处符有个重要的地方需要注意,不需要为它地指定分组元素,也就不需要在查询中使用 GROUP BY子句。PIVOT 运算符隐式地把源表(或表表达式)中既没有指定为扩展元素,也没有指定为聚合元素的那些元素作为分组元素。所以在使用 PIVOT 运算符时,需要保证 PIVOT 运算符的源表除了分组、扩展和聚合元素以外,不能再包含其他属性(列)。以便在指定了扩展元素和聚合元素以后,剩下的属性全部都是欲指定为分组元素的属性。为此,一般不直接把PIVOT 运算符应用到源表,而是将其应用到一个表表达式(该表表达式只包含透视转换需要的3种元素,不包含其他属性)。

    with temp as
    (
    select
     'a' as col1,
     'b' as col2,
     '2' as col3
    union
    select
     'a' as col1,
     'c' as col2,
     '3' as col3
    )
    select col1,b,c
    from temp as t
    pivot (max(col3) for col2 in(b,c)) as  p

    强烈建议不要直接对基础表进行操作,即使表中只包含用于透视转换的列。我们无法预测将来是否会向表中添加新列,从而让查询生成不正确的结果。所以,建议应该使用表表达式作为PIVOT 运算符的输入表,甚至可以将其视为该运算符的语法要求。

  • 相关阅读:
    微信小程序登录
    cURL error 60: SSL certificate problem: unable to get local issuer certificate 报错解决
    MyBatis学习之一----基础了解
    web工程和java工程的区别
    StringUtils的实用功能
    SpringMVC-----部分功能学习
    SpringMVC之国际化
    SpringMVC
    web.xml配置详解
    Hibernate学习-----遇到的相关问题
  • 原文地址:https://www.cnblogs.com/zhangdx/p/3735970.html
Copyright © 2011-2022 走看看