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)

SQLServer2008 行转列3的更多相关文章

  1. SQLServer2008 行转列2

    with a as ( select numb,name,row_number() over( partition by numb order by name desc) rowid from fen ...

  2. SQLServer2008 行转列

    with a as( select *,row_number() over(partition by hyid order by jp desc) rowid from rtc) select a.h ...

  3. SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...

  4. T-SQL 实现行转列

    问题: 我正在寻找一种有效的方式将行转换为SQL服务器中的列 例如,通过下表如何构建出预期结果表. Id  Value   ColumnName 1   John    FirstName 2   2 ...

  5. Oracle行转列、列转行的Sql语句总结

    多行转字符串 这个比较简单,用||或concat函数可以实现  SQL Code  12    select concat(id,username) str from app_userselect i ...

  6. sql的行转列(PIVOT)与列转行(UNPIVOT)

    在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强 一.行转列 1.测 ...

  7. 做图表统计你需要掌握SQL Server 行转列和列转行

    说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成 ...

  8. SQL SERVER特殊行转列案列一则

    今天有个同事找我,他说他有个需求,需要进行行转列,但是又跟一般的行转列有些区别,具体需求如下所说,需要将表1的数据转换为表2的显示格式. 我想了一下,给出了一个解决方法,具体如下所示(先给出测试数据) ...

  9. SQL Server中使用PIVOT行转列

    使用PIVOT行转列 1.建表及插入数据 USE [AdventureDB] GO /****** Object: Table [dbo].[Score] Script Date: 11/25/201 ...

随机推荐

  1. Mybatis代码调试问题总结(一)

    问题: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):   原因排查: 1.检查map ...

  2. 2011 Asia Fuzhou Regional Contest

    Xiangqi http://acm.hdu.edu.cn/showproblem.php?pid=4121 模拟,用高内聚低耦合的思想来写模拟题还是很好的,提高了函数的可重用性,程序的可读性,正确性 ...

  3. svn 分支与合并的使用

      在使用svn的时候我们往往有这样的需求.我们修改某些代码,因为对某项技术不是非常的熟悉,担心自己当前的修改(或者叫测试)会影响到服务器中版本库代码的崩溃等.传统做法我们会手动复制一份代码,然后修改 ...

  4. 数位DP之小小结

    资料链接:http://wenku.baidu.com/view/9de41d51168884868662d623.html http://wenku.baidu.com/view/d2414ffe0 ...

  5. Codeforces Round #253 (Div. 2) D题

    题目大意是选出一个其他不选,问问最大概率: 刚开始想到DP:F[I][J][0]:表示从 前I个中选出J个的最大值, 然后对于F[I][J][1]=MAX(F[I-1][J][1],F[I-1][J- ...

  6. HTTP协议中的5类状态码

    ①   客户方错误      100   继续      101   交换协议     ②   成功      200    OK      201    已创建      202   接收      ...

  7. delphi快捷键

    分类 快捷键 解释 备注 组 件 设 计 类 Escape 选择当前组件容器     Shift + Click 选择多个组件:选择窗体     Tab 选择下一个组件     Shift + Tab ...

  8. codeforces 425B Sereja and Table(状态压缩,也可以数组模拟)

    题目 给出一个n*m的01矩阵, 让你最多改变k个里面的值(0变1,1变0), 使得0.1的连通分量是矩阵.输出最少步数 1 ≤ n, m ≤ 100; 1 ≤ k ≤ 10 题解: 如果01连通分量 ...

  9. iOS验证码倒计时(GCD实现)

    + (void)verificationCode:(void(^)())blockYes blockNo:(void(^)(id time))blockNo { __block ; //倒计时时间 d ...

  10. zoj 3591 Nim 博弈论

    思路:先生成序列再求异或,最多的可能为n*(n+1)/2: 在去掉其中必败的序列,也就是a[i]=a[j]之间的序列. 代码如下: #include<iostream> #include& ...