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
  • 相关阅读:
    Text box to accept only number
    两个经典的Oracle触发器示例
    ELK部署
    Win10+CentOS7双系统引导修复
    自定义多选框(checkbox)和单选框(radio)css样式
    js事件
    js数组与字符串处理 slice、splice、substring、substr、push、pop、shift、reverse、sort、join、split
    css入门基础
    cocos2dx基础篇(7) 触碰事件
    cocos2dx基础篇(6) 定时器schedule/update
  • 原文地址:https://www.cnblogs.com/thomerson/p/14491162.html
Copyright © 2011-2022 走看看