zoukankan      html  css  js  c++  java
  • SQL Server 【应用】行列转换Pivot&Unpivot

    行转列

    准备工作

    create table #temp
    (
    Name nvarchar(10) null,
    Course nvarchar(10) null,
    Score int null
    )
    
    insert into #temp(Name,Course,Score)
    select '小李','语文','88' union
    select '小李','数学','79' union
    select '小李','英语','85' union
    select '小明','语文','79' union 
    select '小明','数学','89' union
    select '小明','英语','87' union
    select '小红','语文','84' union
    select '小红','数学','76' union
    select '小红','英语','92'
    
    select * from #temp

    case when实现转化

    select Name 姓名,
    max(case Course when '语文' then Score end) 语文,
    max(case Course when '数学' then Score end) 数学,
    max(case Course when '英语' then Score end) 英语,
    sum(Score) 课程总分,
    cast(avg(Score) as decimal(18,2)) 课程平均分
    from #temp
    group by Name

    pivot实现转化

    select a.Name 姓名,a.语文,a.数学,a.英语,b.SumScore 课程总分,b.AvgScore 课程平均分
    from #temp 
    pivot
    (
    max(Score) -- 指定作为转换的列的值 的列名
    for Course -- 指定要转换的列的列名
    in(语文,数学,英语) -- 自定义的目标列名,即要转换列的不同的值作为列
    )a,
    (
    select t.Name,sum(t.Score) SumScore,cast(avg(t.Score) as decimal(18,2)) AvgScore
    from #temp t
    group by t.Name
    )b
    where a.Name=b.Name

    列转行

    准备工作

    create table #temp
    (
    Name nvarchar(10) null,
    Chinese int null,
    Math int null,
    English int null
    )
    
    insert into #temp(Name,Chinese,Math,English)
    select '小李','88','79','85' union
    select '小明','79','89','87' union
    select '小红','84','76','92'
    
    select * from #temp

    union all实现

    select t.Name 姓名,t.Course 课程,t.Score 分数 from
    (select t.Name,'Chinese' Course,Chinese Score from #temp t
    union all
    select t.Name,'Math',Math from #temp t
    union all
    select t.Name,'English',English from #temp t) t
    order by t.Name,t.Course

    unpivot实现

    select t.Name 姓名,t.Course 课程,t.Score 分数 
    from #temp 
    unpivot 
    (
    Score for Course
    in(Chinese,Math,English)
    )t
  • 相关阅读:
    linux下安装启动rpc服务
    Red Hat5下源码安装mysql5.6过程记录
    安装使用Oracle OSWbb/OSWbba工具
    使用pip安装BeautifulSoup4模块
    部署Thomas Kyte 的 runstats 工具
    centos7之zabbix监控DELL磁盘阵列
    centos6.5之phpmyadmin安装
    centos7之zabbix服务器的常规优化及其它设置
    centos7之zabbix简单检查之端口监控
    mysql和mariadb备份工具xtrabackup和mariabackup(mariadb上版本必须用这个)
  • 原文地址:https://www.cnblogs.com/thomerson/p/14491162.html
Copyright © 2011-2022 走看看