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

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]



第一个查询语句,貌似就是这样的,但是第二个查询语句,我总感觉有点长了。大家有没有更好的方法啊?
...全文
362 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实现,自己查一下资料,这样的例题很多
内容概要:W25Q128是一款由华邦(Winbond)生产的128M-bit(16MB)串行闪存芯片,支持标准、双通道和四通道SPI接口,适用于空间受限、引脚有限和低功耗系统。该芯片提供灵活的存储架构,包括65,536个可编程页面(每页256字节),支持按4KB扇区、32KB块、64KB块或整片擦除,适用于代码镜像到RAM、直接从SPI执行代码(XIP)以及语音、文本和数据存储。其最高时钟频率可达104MHz(标准SPI)和70MHz(四通道SPI),连续数据传输速率高达35MB/s,性能远超传统串行闪存。芯片还具备多种写保护机制,包括软件和硬件写保护、状态寄存器保护、上/下部阵列保护以及一次性可编程(OTP)安全寄存器,确保数据完整性。此外,它集成了64位唯一序列号和可发现参数(SFDP)寄存器,便于设备识别和配置管理。; 适合人群:嵌入式系统工程师、硬件设计师、固件开发人员以及从事消费电子、工业控制和汽车电子等领域需要外部非易失性存储解决方案的技术人员。; 使用场景及目标:①在资源受限的嵌入式系统中扩展程序或数据存储空间;②实现高速代码加载(Code Shadowing)或将程序直接存储于外部Flash并原地执行(XIP);③利用其多级写保护和安全寄存器特性增强系统的数据安全性和防篡改能力;④通过四线SPI接口提升通信带宽,满足高性能应用需求。; 阅读建议:本资料为芯片的数据手册,技术细节丰富,建议结合具体应用场景重点查阅电气特性、指令集及时序图部分,并参考推荐封装尺寸与布局规范进行PCB设计;对于安全性要求高的项目,应深入研究状态寄存器配置与安全锁机制。
内容概要:本文围绕城市空中交通中的多无人机路径规划问题,提出了一种从仿生搜索机理到分层协同求解的综合优化方法。研究融合了布谷鲶鱼优化算法(CCO)、灰雁优化算法(GGO)与田忌赛马优化算法(THRO)等多种仿生智能优化策略,针对复杂空域环境下多无人机协同飞行中存在的路径冲突、避障、能耗优化与任务分配等多重约束,构建了高效的路径规划模型。通过Matlab仿真平台实现了算法的编码与验证,展示了在多约束耦合场景下的优越求解性能,有效提升了路径安全性、系统整体效率与动态适应能力。该方法不仅解决了传统路径规划中易陷入局部最优的问题,还增强了系统对突发状况的响应能力。; 适合人群:具备一定算法基础和Matlab编程能力,从事智能交通、无人机控制、路径规划及相关领域研究的研发人员与高校研究生。; 使用场景及目标:①应用于城市空中交通管理系统中多无人机的协同路径规划与避障;②为复杂动态环境中智能体群的分层协同决策提供算法支持与仿真验证方案;③助力低空经济、智慧物流、应急救援等场景下的无人系统自主决策能力提升。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注仿生算法的参数设置、分层架构设计逻辑及多目标优化的权衡机制,同时可通过调整环境参数进行扩展性实验,进一步掌握其在不同场景下的适应性与优化潜力。

27,579

社区成员

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

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