zoukankan      html  css  js  c++  java
  • SQLSERVER行列转换

    create table test2(id int,name varchar(20),quarter char,profile1 int)
    insert into test2 values(1,'a',1,1000)
    insert into test2 values(1,'a',2,2000)
    insert into test2 values(1,'a',3,4000)
    insert into test2 values(1,'a',4,5000)
    insert into test2 values(2,'b',1,3000)
    insert into test2 values(2,'b',2,3500)
    insert into test2 values(2,'b',3,4200)
    insert into test2 values(2,'b',4,5500)
    select * from test2
    select id,name,
    [1] as 一季度,
    [2] as 二季度,
    [3] as 三季度,
    [4] as 四季度
    from test2
    pivot
    (count([profile1])
    for [quarter] in ([1],[2],[3],[4])
    ) pvt 
    /*
    id          name                 quarter profile1
    ----------- -------------------- ------- -----------
    1           a                    1       1000
    1           a                    2       2000
    1           a                    3       4000
    1           a                    4       5000
    2           b                    1       3000
    2           b                    2       3500
    2           b                    3       4200
    2           b                    4       5500
     
    (8 行受影响)
     
    id          name                 一季度         二季度         三季度         四季度
    ----------- -------------------- ----------- ----------- ----------- -----------
    1           a                    1           1           1           1
    2           b                    1           1           1           1
     
    (2 行受影响)
    */
    

      

    UNPIVOT是列转行,用法如下:
    假如表结构如下:
    /*  id   name    Q1        Q2       Q3        Q4                   
        1      a       1000    2000    4000     5000
        2      b       3000    3500    4200     5500
     -----------------------------------------------*/
        使用UNPIVOT,将同一行中四个季度的列数据转换成四行数据:
           select id,name,quarter,profile
               from test
               unpivot
               (
                  profile
                  for quarter in ([Q1],[Q2],[Q3],[Q4])
               )
               as unpvt
    
    
    /* -----------------------------------------------
     得出的结果如下:
        id   name   quarter    profile
        1       a         Q1        1000
        1       a         Q2        2000
        1       a         Q3        4000
        1       a         Q4        5000
        2       b         Q1        3000
        2       b         Q2        3500
        2       b         Q3        4200
        2       b         Q4        5500      */
    

      

  • 相关阅读:
    Ubuntu 16.04安装Guake Terminal终端(使用一键唤醒功能)
    MySQL查询count(*)、count(1)、count(field)的区别收集
    MySQL查询在一个表而不在另一个表中的数据
    Spring MVC中的拦截器/过滤器HandlerInterceptorAdapter的使用
    Spring mvc解析
    RestTemplate的一个请求过程,mark一下
    福袋开发迭代总结
    Rest分享
    写Markdown费事?Typora让你像写word一样行云流水,所见即所得。
    送你几个用起来很爽的Studio插件
  • 原文地址:https://www.cnblogs.com/fxfly/p/4886036.html
Copyright © 2011-2022 走看看