zoukankan      html  css  js  c++  java
  • SQLServer2008 行转列3

    with  a as (
    select 日期,学号,名字, '语文' as 科目,语文 as 分数
    from tsco
    union all
    select 日期,学号,名字, '数学' as 科目,数学 as 分数
    from tsco
    union all
    select 日期,学号,名字, '英语' as 科目,英语 as 分数
    from tsco
    )
    select 学号,名字,科目,
    	max(case when 日期='2014/10/1'  then 分数 end) as '2014/10/1' ,
    	max(case when 日期='2014/11/1'  then 分数 end) as '2014/11/1' ,
    	max(case when 日期='2014/12/1'  then 分数 end) as '2014/12/1' 
    from a
    group by 学号,名字,科目
    

     以上写的不对的地方多多指教

    以下是高手写的:

    if OBJECT_ID('数据') is not null drop table 数据
     
    create table 数据(日期 varchar(10),
                      学号 varchar(5), 
                      名字 varchar(4),
                      语文 numeric(3,0),
                      数学 numeric(3,0),
                      英语 numeric(3,0))
    insert into 数据 select '2014/10/1',1,'甲',98,80,60
    insert into 数据 select '2014/10/1',2,'甲',100,40,70
    insert into 数据 select '2014/10/1',3,'丙',50,20,100
    insert into 数据 select '2014/11/1',1,'甲',90,80,60
    go
    declare @i varchar(8000),@j as varchar(8000)
    set @i=''
    set @j=''
    select @i=@i+',['+日期+']' from 数据 group by 日期
    select @j='select * 
    from (select 日期,学号,名字,语文 as 成绩,''语文'' as 科目 from 数据 union all
    select 日期,学号,名字, 数学 as 成绩,''数学'' as 科目 from 数据 union all
    select 日期,学号,名字, 英语 as 成绩,''英文'' as 科目 from 数据) as bb
    pivot (sum(成绩) for 日期 in ('+stuff(@i,1,1,'')+')) as bb'
     
    exec(@j)
    
  • 相关阅读:
    JS身份证真实性校验(一)
    Python之文件操作
    python之数据类型
    Python之循环条件、变量、字符串格式化
    webpack之proxyTable设置跨域
    vue报错解决方案
    CentOS 7 下Ansiable搭建命令列表 及常用监控指令
    CentOS 7 下nagios搭建记录
    弹窗鼠标拖动功能-js
    做好探索性测试,体现你的价值
  • 原文地址:https://www.cnblogs.com/emmy/p/4308607.html
Copyright © 2011-2022 走看看