设为首页 加入收藏

TOP

锋利的SQL-SQLServer的表旋转(行列转换)(三)
2014-11-24 02:54:41 来源: 作者: 【 】 浏览:12
Tags:锋利 SQL-SQLServer 旋转 行列 转换
句:

SELECT stu_name, exam_date,

CASEWHEN exam_sub = '语文' THENexam_score

ELSE NULL

ENDAS 语文,

CASEWHEN exam_sub = '数学' THENexam_score

ELSE NULL

ENDAS 数学,

CASEWHEN exam_sub = '英语' THENexam_score

ELSE NULL

ENDAS 英语

FROM exams;

上面语句将得到如表12-24所示的结果。

表12-24 使用CASE表达式得到的结果

stu_name

exam_date

语文

数学

英语

张三

2009-06-20

90

NULL

NULL

张三

2009-06-20

NULL

95

NULL

张三

2009-06-20

NULL

NULL

100

张三

2009-09-20

85

NULL

NULL

张三

2009-09-20

NULL

90

NULL

张三

2009-09-20

NULL

NULL

98

李四

2009-06-20

80

NULL

NULL

李四

2009-06-20

NULL

85

NULL

李四

2009-06-20

NULL

NULL

90

李四

2009-09-20

75

NULL

NULL

李四

2009-09-20

NULL

80

NULL

李四

2009-09-20

NULL

NULL

88

由上表可以看出,只要按stu_name、exam_date分组计算最大值,就可以得到表12-23所要求的计算结果。参考下面的语句:

SELECT stu_name, exam_date,

MAX(CASE WHEN exam_sub = '语文' THEN exam_score

ELSE NULL

END) AS 语文,

MAX(CASE WHEN exam_sub = '数学' THEN exam_score

ELSE NULL

END) AS 数学,

MAX(CASE WHEN exam_sub = '英语' THEN exam_score

ELSE NULL

END) AS 英语

FROM exams

GROUP BY stu_name, exam_date

ORDER BY stu_name, exam_date;

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C#同步SQLServer数据库中的数据--.. 下一篇SQL语句行列转换两种方法case .....

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java多线程基础 - 华 (2025-12-24 13:20:10)
·深入解读Java多线程 (2025-12-24 13:20:08)
·Spring Boot 中文文档 (2025-12-24 13:20:04)
·如何理解智能指针? (2025-12-24 12:48:26)
·c++是否应避免使用普 (2025-12-24 12:48:23)