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
  • 相关阅读:
    cpio命令
    INI文件格式
    ubuntu死机怎么办
    vim中执行shell命令
    android安装busybox
    putty远程连接ubuntu
    java sdk与jdk区别
    一些使用JSP 编程技巧(转)
    ubuntu12.04 下安装 jdk1.7 maven3.1
    Java Web进阶步骤
  • 原文地址:https://www.cnblogs.com/thomerson/p/14491162.html
Copyright © 2011-2022 走看看