zoukankan      html  css  js  c++  java
  • pivot 与 unpivot 函数是SQL05新提供的2个函数

    pivot 与 unpivot 函数是SQL05新提供的2个函数  

    ------------------------------------------------------------------------------

    pivot函数:

    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(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)

    select * from test    --创建表test

    pivot <wbr>与 <wbr>unpivot函数

    现在需要把quarter 从1列数据变成4列数据  效果如:

    pivot <wbr>与 <wbr>unpivot函数

    把一列拆成几列这时候就能使用pivot函数很简单的实现

    select * from test
    pivot
    (
     sum([profile]) for [quarter]
     in
     ([1],[2],[3],[4])
    )
    as
    s

    注:使用pivot把一列拆成几列时 需要后面as取个别名 这是固定的格式 同时如 for前是必须使用聚合函数的

    当然不使用pivot函数也可以得到相同效果 只是代码长切效率低 但容易理解

    select id,[name],
    '1'=(select sum([profile]) from test where id=a.id and quarter=1),
    '2'=(select sum([profile]) from test where id=a.id and quarter=2),
    '3'=(select sum([profile]) from test where id=a.id and quarter=3),
    '4'=(select sum([profile]) from test where id=a.id and quarter=4)
    from test as a
    group by id,name

    -----------------------------------------------------------------------------------------

    unpivot函数 顾名思义 他就是把几列合并到1列中去

    create table test1(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int)

    insert into test1 values(1,'a',1000,2000,4000,5000)
    insert into test1 values(2,'b',3000,3500,4200,5500)

    select * from test1 --创建test1表

    pivot <wbr>与 <wbr>unpivot函数

    我们要把Q1 Q2 Q3 Q4合到1列 季度列中去 如效果:

    pivot <wbr>与 <wbr>unpivot函数

    使用unpivot可以很简单的实现

    select id ,[name],[jidu],[xiaoshou] from test1
    unpivot
    (
     xiaoshou for jidu in
     ([q1],[q2],[q3],[q4])
    )
    as f

    注:同样需要使用as取别名同样是固定的格式 unpivot函数中没有聚合函数 xiaoshou和jidu列都是原来没有的 jidu表由原来的Q1 Q2 Q3 Q4组成 

    同样的不使用unpivot也可以实现以上的功能

    select id,[name],
    jidu='Q1',
    xiaoshou=(select Q1 from test1 where id=a.id)
    from test1 as a
    union
    select id,[name],
    jidu='Q2',
    xiaoshou=(select Q2 from test1 where id=a.id)
    from test1 as a
    union
    select id,[name],
    jidu='Q3',
    xiaoshou=(select Q3 from test1 where id=a.id)
    from test1 as a
    union
    select id,[name],
    jidu='Q4',
    xiaoshou=(select Q4 from test1 where id=a.id)
    from test1 as a

  • 相关阅读:
    ReactNative之从HelloWorld中看环境搭建、组件封装、Props及State
    iOS开发之虾米音乐频道选择切换效果分析与实现
    Cocoa包管理器之Carthage详解及CocoaPods中心化+Carthage的二进制化
    Cocoa包管理器之CocoaPods详解
    Git知识总览(六) Git分支中的远程操作实践
    Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase
    Git知识总览(四) git分支管理之rebase 以及 cherry-pick相关操作
    Git知识总览(三) 分支的创建、删除、切换、合并以及冲突解决
    Git知识总览(二) git常用命令概览
    Git知识总览(一) 从 git clone 和 git status 谈起
  • 原文地址:https://www.cnblogs.com/sukhoi/p/7434882.html
Copyright © 2011-2022 走看看