精华内容
下载资源
问答
  • UNPIVOT

    2019-09-24 00:37:00
    UNPIVOT UNPIVOT则相反,把数据从列旋转到行 SELECT * INTO product_vlues FROM ( SELECT NAME , YEAR(shijian) AS shijian , jiage FROM dbo....
     
    UNPIVOT
    UNPIVOT则相反,把数据从列旋转到行
    SELECT  *
    INTO    product_vlues
    FROM    ( SELECT    NAME ,
                        YEAR(shijian) AS shijian ,
                        jiage
              FROM      dbo.product
            ) AS ov PIVOT ( SUM(ov.jiage) FOR ov.shijian IN ( [2005], [2006],
                                                              [2008] ) )AS p
                                                             
            SELECT * FROM product_vlues
    -------------------结果----------------

     

    -----查询视图用UNPIVOT----------------------------
                                                             
            SELECT * FROM product_vlues UNPIVOT(jiange FOR shijian IN ( [2005], [2006],
                                                              [2008] )) AS u
    -----结果----------------------------------------------
     

     

    ---------步骤分析---------------------------------------
    UNPIVOT涉及三个逻辑处理阶段
    1.U1:生成副本
    2.U2:提取元素
    3.U3:删除带有NULL的行
    UNPIVOT输入是左表表达式。
    第一步先为左表表达式中的行生成多个副本。要进行逆透视转换的每一列(在UNPIVOT运算符的In子句中出现的列名)都会生成一个副本。
    第二步从来源列中提出与行的当前副本所代表的逆透视转换元素相对应的值。保存的目标名称是FOR子句之前的指定的(本例中为Jiage)。这个目标列将保存虚拟表中与当前行的销售年份相对应的列值。
    第三步将删除掉结果值为NULL的行,返回虚拟表。
     

         Copyright © 2017 程英暾. All Rights Reserved.

    转载于:https://www.cnblogs.com/c546170667/p/7604568.html

    展开全文
  • I want to fetch records from oracle DB where column value is ... Also i am using unpivot in my query. Somehow NULL values are not getting selected because of unpivot keyword. Can you please help me ...

    I want to fetch records from oracle DB where column value is NULL. Also i am using unpivot in my query. Somehow NULL values are not getting selected because of unpivot keyword. Can you please help me about how to get rows for the same when using unpivot.

    EDIT:

    SELECT a.emp_id, a.emp_dept, b.emp_location

    FROM employee a,

    location b UNPIVOT (emp_id

    FOR dummy_id

    IN (emp_id AS 'EMP_ID', last_date AS 'LAST_DATE'))

    WHERE emp_id = 123 AND b.emp_loc_id = 'india' AND b.location IS NULL;

    解决方案

    Oracle 11g R2 Schema Setup:

    CREATE TABLE test ( id, a, b, c, d ) AS

    SELECT 1, 1, 2, 3, 4 FROM DUAL UNION ALL

    SELECT 2, 1, NULL, 3, NULL FROM DUAL;

    Query 1:

    SELECT *

    FROM test

    UNPIVOT INCLUDE NULLS ( value FOR name IN ( a, b, c, d ) )

    | ID | NAME | VALUE |

    |----|------|--------|

    | 1 | A | 1 |

    | 1 | B | 2 |

    | 1 | C | 3 |

    | 1 | D | 4 |

    | 2 | A | 1 |

    | 2 | B | (null) |

    | 2 | C | 3 |

    | 2 | D | (null) |

    展开全文
  • pivot与unpivot函数

    2015-08-28 16:35:20
    pivot 与 unpivot 函数是SQL05新提供的2个函数 灰常灰常的实用
  • pivot_unpivot

    2013-12-28 20:50:30
    Oracle 11g中的pivot和unpivot转换操作
  • Pivot 和 Unpivot

    2021-05-18 08:27:16
    在TSQL中,使用Pivot和Unpivot运算符将一个关系表转换成另外一个关系表,两个命令实现的操作是“相反”的,但是,pivot之后,不能通过unpivot将数据还原。这两个运算符的操作数比较复杂,记录一下自己的总结,以后...

    在TSQL中,使用Pivot和Unpivot运算符将一个关系表转换成另外一个关系表,两个命令实现的操作是“相反”的,但是,pivot之后,不能通过unpivot将数据还原。这两个运算符的操作数比较复杂,记录一下自己的总结,以后用到时,作为参考。

    一,Pivot用法

    Pivot旋转的作用,是将关系表(table_source)中的列(pivot_column)的值,转换成另一个关系表(pivot_table)的列名:

    table_source
    pivot
    (
      aggregation_function(aggregated_column)
      for pivot_column in ([pivot_column_value_list])
    ) as pivot_table_alias
    

    透视操作的处理流程是:

    1. 对pivot_column和 aggregated_column的其余column进行分组,即,group by other_columns;
    2. 当pivot_column值等于某一个指定值,计算aggregated_column的聚合值;

    在使用透视命令时,需要注意:

    • pivot将table_source旋转成透视表(pivot_table)之后,不能再被引用
    • pivot_column的列值,必须使用中括号([])界定符
    • 必须显式命名pivot_table的别名

    1,创建示例数据

    use tempdb
    go 
    
    drop table if exists dbo.usr
    go
    
    create table dbo.usr
    (
        name varchar(10),
        score int,
        class varchar(8)
    )
    go
    
    insert into dbo.usr
    values('a',20,'math'),('b',21,'math'),('c',22,'phy'),('d',23,'phy')
    ,('a',22,'phy'),('b',23,'phy'),('c',24,'math'),('d',25,'math')
    go
    
    View Code

    2,对name进行分组,对score进行聚合,将class列的值转换为列名

    select p.name,p.math,p.phy
    from dbo.usr u
    pivot
    (
        sum(score)
        for class in([math],[phy]) 
    ) as p
    

    3,pivot的等价写法:使用case when语句实现

    pivot命令的执行流程很简单,使用caseh when子句实现pivot的功能

    select u.name,
        sum(case when u.class='math' then u.score else null end) as math,
        sum(case when u.class='phy' then u.score else null end) as phy
    from dbo.usr u
    group by u.name
    

    使用group by子句对name列分组,使用 case when 语句将pivot_column的列值作为列名返回,并对aggregated_column计算聚合值。

    4,动态Pivot写法

    静态pivot写法的弊端是:如果pivot_column的列值发生变化,静态pivot不能对新增的列值进行透视,变通方法是使用动态sql,拼接列值

    Script1,使用case-when子句实现

    declare @sql nvarchar(max)
    declare @columnlist nvarchar(max)
    
    set @columnlist=N''
    
    ;with cte as
    (
    select distinct class
    from dbo.usr
    )
    select @columnlist+='sum(case when u.class='''+cast(class as varchar(10))+N''' then u.score else null end) as ['+cast(class as varchar(10))+N'],'
    from cte
    
    select @columnlist=SUBSTRING(@columnlist,1,len(@columnlist)-1)
    
    select @sql=
    N'select u.name,'
        +@columnlist
    +N'from dbo.usr u
    group by u.name'
    
    exec(@sql)
    
    View Code

    Script2,使用pivot子句实现

    declare @sql nvarchar(max)
    declare @classlist nvarchar(max)
    
    set @classlist=N''
    
    ;with cte as
    (
        select distinct class
        from dbo.usr
    )
    select @classlist+=N'['+cast(class as varchar(11))+N'],'
    from cte
    
    select     @classlist=SUBSTRING(@classlist,1,len(@classlist)-1)
    
    select @sql=N'select p.name,'+@classlist+
    N' from dbo.usr u
    PIVOT
    (
        sum(score) 
        for class in('+@classlist+N')
    ) as p'
    
    exec (@sql)
    
    View Code

    二,Unpivot用法

    unpivot是将列名转换为列值,列名做为列值,因此,会新增两个column:一个column用于存储列名,一个column用于存储列值

    table_soucr
    unpivot
    (
    newcolumn_store_unpivotcolumn_name for 
    newcolumn_store_unpivotcolumn_value in (unpivotcolumn_name_list)  
    )
    

    逆透视(unpivot)的处理流程是:

    1. unpivotcolumn_name_list是逆透视列的列表,其列值是相兼容的,能够存储在一个column中
    2. 保持其他列(除unpivotcolumn_name_list之外的所有列)的列值不变
    3. 依次将unpivotcolumn的列名存储到newcolumn_store_unpivotcolumn_name字段中,将unpivotcolumn的列值存储到newcolumn_store_unpivotcolumn_value字段中

    1,创建示例数据

    CREATE TABLE dbo.Venders 
    (
        VendorID int, 
        Emp1 int, 
        Emp2 int,  
        Emp3 int, 
        Emp4 int, 
        Emp5 int
    );  
    GO 
     
    INSERT INTO dbo.Venders VALUES (1,4,3,5,4,4);  
    INSERT INTO dbo.Venders VALUES (2,4,1,5,5,5);  
    INSERT INTO dbo.Venders VALUES (3,4,3,5,4,4);  
    INSERT INTO dbo.Venders VALUES (4,4,2,5,5,4);  
    INSERT INTO dbo.Venders VALUES (5,5,1,5,5,5);  
    GO 
    
    View Code

    2,unpivot用法示例

    将Emp1, Emp2, Emp3, Emp4, Emp5的列名和列值存储到字段:Employee和Orders中

    SELECT VendorID, Employee, Orders  
    FROM dbo.Venders as p 
    UNPIVOT  
    (Orders FOR Employee IN   
          (Emp1, Emp2, Emp3, Emp4, Emp5)  
    )AS unpvt;  
    GO 
    

    3,unpivot可以使用union all来实现

    select VendorID, 'Emp1' as Employee, Emp1 as Orders
    from dbo.Venders
    union all 
    select VendorID, 'Emp2' as Employee, Emp2 as Orders
    from dbo.Venders
    union all 
    select VendorID, 'Emp3' as Employee, Emp3 as Orders
    from dbo.Venders
    union all
    select VendorID, 'Emp4' as Employee, Emp4 as Orders
    from dbo.Venders
    union all
    select VendorID, 'Emp5' as Employee, Emp5 as Orders
    from dbo.Venders
    
    View Code

    4,动态unpivot的实现,使用动态sql语句

    聪明如你,很容易实现,代码就不贴了....

    三,性能讨论

    pivot和unpivot的性能不是很好,不要用来处理海量的数据

    参考文档:

    Using PIVOT and UNPIVOT

    展开全文
  • UNPIVOT的应用

    2020-10-30 15:15:18
    UNPIVOT的应用 select distinct NO,YEAR,MONTH,budgetversion,ISNULL(Sales,0) AS Sales, … getImport_History where YEAR=YEAR(GETDATE()) 结果集 select * from (结果集)A UNPIVOT( Budget_Amount(要取值) for ...

    UNPIVOT的应用

    select distinct NO,YEAR,MONTH,budgetversion,ISNULL(Sales,0) AS Sales,

    getImport_History where YEAR=YEAR(GETDATE())

    结果集在这里插入图片描述
    select *
    from (结果集)A
    UNPIVOT(
    Budget_Amount(要取值) for attribute(要取字段) in(
    [Sales]

    ,Trade
    )
    ) as upv

    在这里插入图片描述

    展开全文
  • PIVOT和UNPIVOT

    2020-07-06 15:28:39
    UNPIVOT用于将列转为行,完整语法如下: 完整语法: TABLE_SOURCE UNPIVOT( value_column FOR pivot_column IN(<column_list>) ) 以上语法可以理解为value_column字段与pivot_column字段的行列(列行)转
  • 主要给大家介绍了关于SQL知识点之列转行Unpivot函数的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • oracle pivot unpivot

    2019-10-02 12:29:09
    pivot 列转行 unpivot 行转列 转载于:https://www.cnblogs.com/jgmor/p/11078359.html
  • pivot unpivot In this article, we’ll walk-through the SQL Pivot and SQL Unpivot operators and how they can be useful to transpose SQL Server data. Also, we’ll discuss both static and dynamic ways ...
  • Oracle PIVOT和UNPIVOT

    2020-09-17 22:58:32
    您可以使用Oracle PIVOT功能(相反,使用Oracle UNPIVOT)进行此操作。 目录 本指南方涵盖以下主题。您可以单击以下任一条目进入本页的该部分: 问题 Oracle SQL中的PIVOT关键字 简单的PIVOT示例 指定分组的...
  • sql unpivot 我最近在一个匿名用户的Stack Overflow上遇到一个非常有趣的问题 。 问题是关于使用表值函数在Oracle中生成以下形式的表: Description COUNT ------------------- TEST1 10 TEST2 15 TEST3 25 TEST4...
  • 语法 unpivot函数:列转行函数:  语法:unpivot(新增值所在列的列名 for 新增列转为行后所在列的列名 in (需转为行的列名));
  • sqlserver使用UNPIVOT函数列转行
  • 使用 PIVOT 和 UNPIVOT

    2020-09-17 22:45:16
    可以使用PIVOT和UNPIVOT关系运算符将表值表达式更改为另一个表。PIVOT通过将表达式中的一个列的唯一值转换为输出中的多列,来轮替表值表达式。PIVOT在需要对最终输出所需的所有剩余列值执行聚合时运行聚合。与 PIVOT...
  • SQL行列转换 Pivot UnPivot
  • privot和unpivot

    2017-12-12 09:46:00
    --ghdm_id 可以随意名称--scjxdm,scjxmc 表中需要字段--unpivot 关键字(把列的位置转换成行) -- ghdm_id(随意名称) for(关键字) ghid(随意名称)-- in(zgghdm,ghdm2,ghdm1)表中字段SELECT ghdm_id,scjxdm,...
  • pivot和unpivot函数

    千次阅读 2019-06-03 14:56:39
    一:unpivot列转行函数举例演示:创建一张表tmp_test,数据如图所示代码展示:select code,name,cource,grade from tmp_test unpivot(grade for source in (chinese,math,english));数据结果展示: 二:pivot行转列...
  • SQL pivot unpivot

    2017-01-09 10:53:32
    unpivot: pivot实现动态列: declare @depts nvarchar(1000),@sql nvarchar(4000) select @depts=(select '['+DeptName+'],' from Edu_Department where IsBranch = 1 FOR XML PATH(''))  select
  • gbase unpivot用法报错

    2019-03-29 15:15:08
    (select XZQH_DM, QJ, xz_dm, cb_code, decode(cb_code, 'CBRS', '参保人数年末数', 'JFRS', '实际缴费人数年末数', ... unpivot(rs for cb_code in(cbrs, jfrs, cbrs_zz, cbrs_ltx)) )
  • 关于UNPIVOT 操作符

    2018-04-12 15:40:00
    UNPIVOT 操作符说明 简而言之,UNPIVOT操作符就是取得一个行的数据集合,然后把每一行都转换成多个行数据。为了更好地理解,请看下图: 图1 从上图中,你能发现UNPOVOT操作符,取得了两行数据,每行包含三个...
  • SQLServer列转行函数Unpivot会将多列转化为多行,列名转换为列值,会新增两个column:一个column用于存储列名,一个column用于存储列值。
  • Oracle列转行unpivot

    2019-07-12 13:31:40
    unpivot可以实现列转行,所转的列的字段类型必须一致 SELECT STU_NAME, TERM, COURSE_MARK FROM (SELECT '罗飞' STU_NAME, '2001-2002' TERM, '90' 微积分, '88' 线性代数, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,761
精华内容 1,504
关键字:

unpivot