SQL SERVER行列转换

行列转换
要用到SQL SERVER
CASE [字段名] WHEN ‘字段名’ THEN [字段的数据值] ELSE 0 END
CASE WHEN [字段名] = ‘字段名’ THEN [字段的数据值] ELSE 0 END
判断一个字段名是否和这个改字段名相等,如果相等,就得到字段的数据值,否则为0.

Student

uid (key) name age
1 张三 22
2 李四 22
3 王五 19

score

sid (key) sname score uid
1 数学 111 1
2 英语 122 1
3 语文 119 1
4 数学 121 2
5 英语 122 2
6 语文 123 2
7 数学 131 3
8 英语 142 3
9 语文 139 3

输出表格式

uid age name 数学 英语 语文
SELECT  s3.uid,s3.age,s3.name,
SUM(CASE s3.sname WHEN '英语' THEN scores ELSE 0 END) AS '数学',
SUM(CASE s3.sname WHEN '数学' THEN scores ELSE 0 END)     AS '英语',
SUM(CASE s3.sname WHEN '语文' THEN scores ELSE 0 END) AS '语文'   
FROM (select s1.uid,s1.name,s1.age,sname,scores,sid from 
dbo.student as s1,dbo.score as s2 where s1.uid = s2.uid) as s3
GROUP BY  s3.uid,s3.age,s3.name;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 1,254评论 0 7
  • 50个常用的sql语句 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cna...
    最美的太阳WW阅读 3,235评论 0 23
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 在收集《聊聊婚礼跟拍【摄影篇 二】》的素材时,无意间翻到了婚礼界大亨24格的宣传片,优秀的影像总能使人陷入深深的沉...
    书旅社阅读 218评论 2 2
  • 一条挂满青苔的小径,石板铺就,螺旋着向山上飘去。 森木冉冉,草木清香,抬头一线天,小径扭扭曲曲向上再向上,它的尽头...
    山水依情阅读 291评论 2 2