`

PIVOT初接触

阅读更多

以前一直没接触过PIVOT这个概念!当接触时,赶紧查了下资料如下:

其语法结构:

<pivot_clause> ::= ( 

       aggregate_function ( value_column )           

       FOR pivot_column           

       IN (<column_list>)

)  

<unpivot_clause> ::=

     value_column

     FOR pivot_column

     IN (<column_list>

 



光看结构很难看懂,资料都是说 “为了实现行列转换”,感觉自己理解的怎么就不同了,我到学得它跟分组查询 差不多,

就像 select name,sum(score) group by name,只是在查询很复杂时可能才能够体现它的简洁明了吧!听高手说,PIVOT在执行时会转成你之前完全能用其它SQL语法写出来的SQL语句,我也不知道是不是真的,毕竟我也才接触PIVOT,网络上都是以下这个例子:

 

if object_id('test') is not null
drop table test
go

 

 

create table test(id int,name varchar(20),quarter int,profile int)
insert into test values(1,'a',1,1000)
insert into test values(1,'a',2,2000)
insert into test values(1,'a',3,4000)
insert into test values(1,'a',4,5000)
insert into test values(1,'a',4,5000)
insert into test values(2,'b',1,3000)
insert into test values(2,'b',2,3500)
insert into test values(2,'b',3,4200)
insert into test values(2,'b',4,5500)

使用PIVOT将四个季度的利润转换成横向显示:

 

(1)方法一:
select id,name, [1] as "一季度",
[2] as "二季度",
[3] as "三季度",
[4] as "四季度"
from
test
pivot
(
sum(profile)
for quarter in
(
[1],[2],[3],[4])
)
as pvt

 

 

结果为:
id          name         一季度         二季度         三季度         四季度
----       --------        ------------ -----------      ---------      -----------
1           a                1000        2000        4000        10000
2           b                3000        3500        4200         5500

其实网上有种理解我到蛮认同的:

          它的计算过程是:先执行select id,name,sum(profile) from test group by id,name,quarter
          然后把相应的值填充到相应的位置,你用其它的聚合函数也对

即用分组查询出来的结果:select id,name,sum(profile) from test group by id,name,quarter

id          name                
-----      ---------         -----------
1           a                    1000
1           a                    2000
1           a                    4000
1           a                    5000
2           b                    3000
2           b                    3500
2           b                    4200
2           b                    5500

 

在从新换种布局显得跟明了,也就是把最后一列按条件变成了行的显示.

其实除了上面的方法以外还有其它的方法,有以下:

(2)方法二:

DECLARE @Str NVARCHAR(1000)
select @Str=isnull(@Str + ',','')+ '['+ cast(quarter as nvarchar(20)) + ']' from ( select distinct  quarter  from test) a
exec('select id,name,'+ @str +'from test '
+'PIVOT
(
 SUM(profile) for quarter IN ('+@str+')
)
as pvt')

(3)方法三:

第一种方法是直接把知道的情况变成列,那么如果我们不知道那种情况该设为哪列呢?如以A或B开头的是原料,以1,2,8开头的是成品呢?

这时就是这种情况啦?

select *
from
(
  select id,name,
  case when quarter=1 then '第一季度'
          when quarter=2 then '第二季度'
          when quarter=3 then '第三季度'
          when quarter=4 then '第四季度'
          else ''
  end as during,
  profile
  from test
  where quarter in ('1','2','3','4')
)p
PIVOT
(
  sum(profile)
  FOR
    during
  IN
    ([第一季度],[第二季度],[第三季度],[第四季度])
)
as pvt

这种情况到实际中会遇到的情况。

SELECT  date, sum([p1]) as p1, sum([p2]) as p2, sum([p3]) as p3

FROM

 (select date,

     case when substring(item,1,1) in ('A','B') then 'p1'

          when substring(item,1,1) in('D')  then  'p2'

          when substring(item,1,1) in( '5','6','7','8','9')  then 'p3'

          else ''

     end as type,

     qty

  from table_name

  where date between '2010-5-01' and '2010-9-01'

  and substring(item,1,1) in ('A','B', 'D', '5','6','7','8','9')

 ) p

PIVOT

(

 sum (qty)

 FOR type

   IN

 ([p1], [p2], [p3] )

) AS pvt

group by cutoffdate

 

不过这种情况需要求和的字段在p中已经有查询。

这是我初次接触PIVOT函数的理解.

 

分享到:
评论

相关推荐

    搜集的Pivot例子

    Pivot,通常指的是数据透视表或数据透视图,是一种强大的数据分析工具,用于汇总、组织、分析和展示大量数据。在IT行业中,特别是数据分析和数据可视化领域,Pivot扮演着至关重要的角色。它允许用户通过拖放操作来...

    PowerPivot 入门手册_giantu54_PowerPivot_

    **PowerPivot 入门手册** PowerPivot是一款由Microsoft开发的强大数据分析工具,它整合在Excel和SharePoint中,为用户提供了高级的数据分析和建模功能。作为一个入门手册,本书将帮助初学者理解和掌握PowerPivot的...

    SQL Server 关于Pivot详解

    SQL Server 关于 Pivot 详解 在本文中,我们将详细介绍 SQL Server 中的 Pivot 语句,并结合实例分析和实验题目,帮助读者快速掌握其使用。 Pivot 语法 Pivot 语句的基本语法如下: ``` SELECT &lt;非透视的列&gt;, ...

    pivot_130_beta2_full_thumb3hr_pivot_php_

    "pivot_130_beta2_full_thumb3hr_pivot_php_" 这个标题提到了一个软件版本,"pivot 130 beta2 full version",这表明我们在讨论的是 Pivot 软件的第 130 版本的 Beta 2(测试版2)。"full version" 指的是这个版本是...

    Oracle行转列之pivot

    从Oracle 11g版本开始,引入了PIVOT和UNPIVOT关键字,以支持显式的查询转换,即从行数据转换为列数据,或从列数据转换为行数据,进而生成交叉表格式的结果。这一技术尤其适用于报表生成,使得能够使用SQL语句针对...

    PowerPivot for Excel 帮助

    PowerPivot for Excel 是微软公司推出的一款增强型数据模型工具,它与Excel紧密集成,使得用户能够从各种数据源中获取数据、创建数据分析模型,并在Excel内部进行数据探索和报告。PowerPivot扩展了传统Excel的功能,...

    asp.net 实现Pivot表

    在IT行业中,Pivot表(也称为数据透视表)是一种强大的数据分析工具,它允许用户对大量数据进行快速的汇总和分析。在ASP.NET框架下,我们可以利用多种技术来实现Pivot表的功能,以便在Web应用中展示数据的聚合和转换...

    IV Pivot Editor

    Easily set your pivot points inside Unity. Unlike the other pivot editor solutions on the asset store you can set the pivot point using scene handles, snap the pivot to mesh vertices. Features: • ...

    PowerPivot的数据分析

    标题《PowerPivot的数据分析》所涵盖的知识点主要围绕Microsoft Excel 2010中的PowerPivot工具,这是微软为数据分析师提供的一个强大的数据建模工具,用以增强Excel的数据分析功能。从内容概览可以看出,本书全面地...

    pivot4.1.13

    1. **直观的用户界面**:pivot4.1.13提供了清晰直观的图形界面,使得即便是初次接触的用户也能快速上手。所有的操作工具和选项都一目了然,方便用户进行动画设计。 2. **骨骼系统**:软件内置了强大的骨骼系统,...

    Excel Power Pivot数据建模分析(进阶篇)资料.zip

    《Excel Power Pivot数据建模分析(进阶篇)》是一份深入探讨Excel数据分析技术的资料集,主要聚焦在Power Pivot工具的应用,旨在帮助用户提升在数据处理和分析方面的专业技能。该资料集涵盖了一系列关键知识点,...

    Gauss_pivot.zip_pivot_数值分析pivot

    高斯迭代解方程 数值分析 西安交通大学 作业

    pivot火柴人制作工具

    "pivot火柴人制作工具"是一款专为动画爱好者设计的软件,主要用于创建火柴人风格的动态动画。这款工具以其简单易用的特性,尤其适合初学者和那些想要快速制作简单动画的人。与传统的动画软件如Adobe Flash相比,...

    Gauss_pivot.zip_gausspivot_matlab pivot_pivot_pivot of gauss_高斯p

    在本文中,我们将深入探讨高斯列主元消去法(Gauss Pivot)以及如何在MATLAB环境中实现这一算法来解决线性方程组。高斯列主元消去法是一种数值线性代数方法,它通过一系列行变换将系数矩阵转化为上三角形或阶梯形...

    创建PowerPivot工作簿

    ### PowerPivot工作簿创建指南 #### PowerPivot for Excel 概览 PowerPivot for Excel 是一款由Microsoft开发的插件,专为Excel 2010设计,旨在帮助用户处理和分析大规模数据集。通过PowerPivot,用户可以直接在...

    pivot神通汉化版

    "pivot神通汉化版"是一款专为火柴人动画制作设计的应用软件,它以其便捷的操作和全面的功能在用户中获得了良好的口碑。这款软件的核心在于它能够帮助用户轻松创建出动态的火柴人动画,即便没有深厚的图形设计基础,...

    pivot d3 的源代码

    "pivot d3" 是一个基于数据操作和可视化技术的库,它结合了Pivot Table(透视表)的功能和D3.js的数据驱动可视化库。Pivot Table是一种数据分析工具,用于汇总、组织和展示大量数据,而D3.js则是一个强大的...

    pivot4 火柴人动画制作软件

    pivot4,最新的pivot,是一款简单易上手的火柴人动画软件,相对以往的pivot3来说,增加了许多新的功能

    pivot3火柴人工具包

    "pivot3火柴人工具包"是一个专门为火柴人动画制作设计的资源集合,它包含了丰富的素材和功能,便于用户创建生动有趣的火柴人动画。这个工具包是中文版,对于国内用户来说,语言障碍不再是问题,使得操作更加便捷易懂...

    Pivot3.1英文版

    Pivot3。1 轻松制作火柴人 制作火柴人的首选工具 不得不看 不看后悔

Global site tag (gtag.js) - Google Analytics