学生成绩表的行列转换并显示优良中差

Code_Star 2012-01-06 10:09:48
数据表原内容如下:

id name subject score
----------------------------------
1 张三 语文 80
2 张三 数学 60
3 张三 英语 90
4 李四 语文 92
5 李四 数学 65
6 李四 英语 78



想要查询并显示成如下样式:

姓名 语文 数学 英语
----------------------------------
李四 92 65 78
张三 80 60 90


这个要求我用CASE-WHEN-THEN-END结构的语句实现了。语句如下:

SELECT [name] AS 姓名,
MAX( CASE subject WHEN '语文' THEN score END) AS 语文,
MAX( CASE subject WHEN '数学' THEN score END) AS 数学,
MAX( CASE subject WHEN '英语' THEN score END) AS 英语
FROM student
GROUP BY [name]



现在我现在想要查询并显示成如下结果:
(80分及以上为优,60-79为良,小于60为差)

姓名 语文 数学 英语
----------------------------------------
李四 优 良 良
张三 优 良 优

我想到的查询方法如下:


SELECT [name] AS 姓名,
MAX( CASE subject WHEN '语文' THEN
(CASE WHEN score>=80 THEN '优' WHEN score<80 AND score >=60 THEN '良' WHEN score<60 THEN '差' END )
END) AS 语文,
MAX( CASE subject WHEN '数学' THEN
(CASE WHEN score>=80 THEN '优' WHEN score<80 AND score >=60 THEN '良' WHEN score<60 THEN '差' END )
END) AS 数学,
MAX( CASE subject WHEN '英语' THEN
(CASE WHEN score>=80 THEN '优' WHEN score<80 AND score >=60 THEN '良' WHEN score<60 THEN '差' END )
END) AS 英语
FROM student
GROUP BY [name]



第一个查询语句,貌似就是这样的,但是第二个查询语句,我总感觉有点长了。大家有没有更好的方法啊?
...全文
349 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Code_Star 2012-01-10
  • 打赏
  • 举报
回复
以前都不知道用pivot,看了两位的意见,尤其是第二位的具体case,再结合自己查的资料,相对了解一些了。谢谢各位,尤其是第二位大哥,劳你用心了。
美到心痛 2012-01-06
  • 打赏
  • 举报
回复

--2000觉得长,只有把优良差先处理了
SELECT [name] AS 姓名,
MAX( CASE subject WHEN '语文' THEN score END) AS 语文,
MAX( CASE subject WHEN '数学' THEN score END) AS 数学,
MAX( CASE subject WHEN '英语' THEN score END) AS 英语
FROM
(select name,subject,
CASE WHEN score>=80 THEN '优' WHEN score<80 AND score >=60 THEN '良' WHEN score<60 THEN '差' END score
from student ) as a
GROUP BY [name]

--2005
select * from
(select name,subject,
CASE WHEN score>=80 THEN '优' WHEN score<80 AND score >=60 THEN '良' WHEN score<60 THEN '差' END score
from student) as a
pivot(max(score) for subject in(语文,数学,英语))b

  • 打赏
  • 举报
回复
2005以上版本可以使用pivot实现,自己查一下资料,这样的例题很多
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 Webpack所提供的实时更新功能显著提升了前端开发的工作效率,以下将介绍针对vuecli实时更新无法正常工作的解决策略: 1、审查控制台,在编译期间留意是否存在任何提示信息,这些提示信息极有可能引发实时更新的中断 2、对于vueCli3.0版本及后续版本,需注意避免使用cnpm来安装依赖库,应选用npm进行安装 以上即为解决vuecli3.0实时更新失效问题的全部分享内容,期望能为读者提供有益的参考,并期待大家给予软件开发网更多的支持 在前端构建过程中,Vue CLI 3.0是一个极具效能的工具,它提供了便捷的项目构建初始化、配置管理以及构建流程等功能。然而,一旦热更新(Hot Module Replacement,HMR)功能无法正常运作,将严重阻碍开发效率,因为每次代码的变更都需要手动刷新浏览器才能观察到结果。本文将详尽阐述如何处理Vue CLI 3.0热更新无法启动的问题 热更新作为webpack的核心特性之一,它使得开发者能够在无需完整刷新页面的情况下更新模块,从而迅速预览代码的修改结果。当热更新功能出现故障时,可能的原因多种多样,我们需要逐一进行排查。 1. **审查控制台中的提示信息**:当热更新出现异常时,首要步骤是检查开发模式下浏览器控制台所显示的输出内容。编译过程中的提示信息可能会造成热更新功能的失效。这些提示通常与代码的类型校验、ESLint规则或依赖库版本的不匹配有关。通过解决这些问题并消除提示,有助于恢复热更新功能。例如,确保所有导入路径准确无误,避免使用未声明的变量,或更新至兼容的库版本。 2. **避免使用cnpm安装依赖项**:cnpm是由淘宝...

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧