• 透视转换


    透视数据(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 运算符的输入表,甚至可以将其视为该运算符的语法要求。

  • 相关阅读:
    Navicat工具链接 mysql"Access denied for user'root'@'IP'" 用户远程赋值
    centos 安装 swoole_framework 框架
    安装Ubuntu时出现Intel VT-X没有开启
    qt中控件的使用函数
    位操作
    快速排序
    二分查找法
    面试题第二弹
    串口助手输出乱码或无输出问题
    stm32串口烧写程序到开发板
  • 原文地址:https://www.cnblogs.com/zhangdx/p/3735970.html
Copyright © 2020-2023  润新知