加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

数据透视表消除聚合操作

发布时间:2020-05-23 05:31:27 所属栏目:程序设计 来源:互联网
导读:英文原文地址: http://www.sqlmag.com/article/tsql3/pivoting-without-aggregation.aspx PIVOT操作(生成数据透视表)很有用,你可以聚合和旋转表中的数据以便增加数据的可读性。但是,有时候你不想在PIVOT表的同时进行聚合函数的操作。比如:你可以希望简

英文原文地址: http://www.sqlmag.com/article/tsql3/pivoting-without-aggregation.aspx PIVOT操作(生成数据透视表)很有用,你可以聚合和旋转表中的数据以便增加数据的可读性。但是,有时候你不想在PIVOT表的同时进行聚合函数的操作。比如:你可以希望简单的旋转表1中的数据,来达到每一个team和其对应的members在一行中,就像表2中的所示的那样。





但是一下是PIVOT操作的基本语法:

   PIVOT
   (Aggregate function (column1)
     FOR column2
     IN ( [val1],[val2],[val3] )) AS P
   where
     column1 is the column you want to aggregate
     column2 is the column you want to pivot
     [val1],and [val3] are the headings for the pivoted columns
     P is the alias for the results of the PIVOT expression
这个PIVOT表达式需要聚合函数。我设计了一个方法可以避免聚合操作。下图展示了这个方法的使用。


B标识的select语句很关键,这个语句中使用了ROW_NUMBER 函数,使用OVER子句按照teams类别来分开和排序结果。 从下图可以看到,对应teams(CRM/ERP)的members显示了在其组中对应位置的数字。
因为每一个team中的数字之和一个member有联系,所以可以在PIVOT语句中使用MAX聚合函数。(对应member中的最大数字永远只和唯一的member对应)。 所以在C标识的语句中使用PIVOT (MAX(Member)来聚合Member列,使用FOR RowNum来pivot列名为RowNum的列。PIVOT 表达式的其他部分为IN ([1],[2],[3])) AS pvt 使用别名作为pivoted列的列名。实际的列名在A标注的select语句中。 注意查询不符合名称规则的列,比如列名正好是SQL保留字,列名就需要加上[]。 在示例中,虽然你不能移除PIVOT语句中的聚合函数,但是你可以忽略它的影响。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读