使用 case when进行行列转换
固定列数的行列转换
如表结构为:
如
Name subject score
---------------------------
张三 语文 80
张三 数学 70
张三 英语 60
李四 语文 90
李四 数学 80
李四 英语 100
....
转换为 :
语文 数学 英语
张三 80 70 60
李四 90 80 100
要求:创建表,源表,表名: Stu , 只用一句sql 得到转换结果。
解答:
方法一 :通过生成临时表的方式操作
select name ,sum(yw) as '语文',sum(sx) as '数学',sum(wy) as '英语'
from(
select name ,
CASE subject WHEN '语文' THEN score END AS yw,
CASE subject WHEN '数学' THEN score END AS sx,
CASE subject WHEN '英语' THEN score END AS wy
from Stu
) tempStu
group by name
方法二:课程只有语文、数学、物理这三门课程则可以使用静态sql 来实现 Sql2000
select name as 姓名,
max(case subject when '语文' then score else 0 end) 语文,
max(case subject when '数学' then score else 0 end) 数学,
max(case subject when '英语' then score else 0 end) 英语
from Stu
group by name
方法三:如果课程不止语文、数学、物理这三门课程 则可以使用动态sql 来实现
创建一个用户变量,使用简单的T-SQL来实现。 Sql2000
declare @sql varchar(8000) --声明一个变量
set @sql = 'select name as 姓名'
select @sql = @sql + ' , max(case subject when ''' + subject+ ''' then score else 0 end) [' + subject+ ']'
from (select distinct subject from Stu) as a
set @sql = @sql + ' from Stu group by name'
print @sql --打印生成的sql
exec(@sql) --执行该sql
注: case when的作用就是一个条件选择语句,根据不同的要求显示不同的内容,格式是这样的case when [选择条件] then [结果1] else [结果2] end 其中[选择条件]也可以放在case之后。
CASE WHEN语句在DB2,ORACLE,SQL SERVER系列,SYBASE等大型数据库都受到支持,是标准的SQL语句.
使用 case when进行行列转换相关推荐
- mysql 行列转换
一.需求 我们有三张表,我们需要分类统计一段时间内抗生素的不同药敏结果,即 report_item_drugs 表的 drugs_result, 在不同项目project_name 和不同抗生素 an ...
- SQL语句行列转换两种方法 case ...when 和pivot函数应用
2019独角兽企业重金招聘Python工程师标准>>> SQL语句行列转换两种方法 case ...when 和pivot函数应用SQL语句行列转换两种方法 case ...when ...
- mysql行列转换case_浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用_MySQL...
bitsCN.com /*创建数据库*/ CREATE DATABASE tmp go USE tmp go /*创建数据库测试表*/ CREATE TABLE [Scores] ( [ID] INT ...
- mysql pivot函数怎么用_浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用...
/*创建数据库*/ CREATE DATABASE tmp go USE tmp go /*创建数据库测试表*/ CREATE TABLE [Scores] ( [ID] INT IDENTITY(1 ...
- SQL CASE When THEN END 行列转换,复杂查询
使用 CASE CASE 函数是特殊的 Transact-SQL 表达式,它允许按列值显式可选值.数据中的更改是临时的,没有对数据进行永久更改.例如,CASE 函数可以在 state 列中有 CA 值 ...
- [转载]SQL Server行列转换实现
一.Pivot和UnPivot介绍 1.Pivot介绍 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVO ...
- 普通行列转换(交叉表,横表变列表)
SQL code /* 标题:普通行列转换(version 2.0) 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 时间:2008-03-09 地点:广东深圳 说明:普通行列转换(versio ...
- Oracle 行列转换
Oracle 行列转换 1.固定列数的行列转换 如 student subject grade --------- ---------- -------- student1 语文 80 student ...
- SQL中PIVOT 行列转换
来源:http://www.studyofnet.com/news/295.html PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列 ...
最新文章
- opencv 斑马线,条纹检测
- 建模心法(1)——百战不殆是可能的吗?
- 2020 mse 清华_ICSMSE 2020
- pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存
- matlab 三维 作图 坐标轴_MATLAB学习——MATLAB中的三维绘图指令
- Tomcat 启动报错The APR based Apache Tomcat Native l...
- 最小生成树计数(HYSBZ-1016)(简化版实现)
- Windows Phone 8初学者开发—第6部分:设置应用程序的样式
- php-java-bridge 作用_PHP-Java-Bridge的使用(平安银行支付功能专版)
- BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]
- C++ boost共享锁 unique_lock shared_lock
- 【转】Android业务组件化之URL Scheme使用
- 【笔记】Python算法教程(1)
- 深度IP转换器高匿名8级加密企业级专用IP软件
- assets文件使用
- PS抠发丝技巧 「选择并遮住…」
- 解决微信小程序开发工具右上角没有上传按钮
- Android app包下fragment详细使用
- requests模块的异常处理
- 捷径:通过快捷指令下载应用图标、音乐封面和电影海报
热门文章
- Spring事务嵌套引发的问题--Transaction rolled back because it has been marked as rollback-only...
- Android-简单拨号器案例
- 创建ACCESS数据库,并且创建表和数据。重点:关闭ACCESS数据库引用
- CString与std::string unicode下相互转化
- 【转】 SED多行模式空间
- 作为软件设计师的2013年终总结
- 11月11日:一个人的情人节
- wms仓储系统培训_WMS系统开创智慧仓储新方向
- three.js加载3d模型_可加载5亿多边形,InsiteVR推Quest端BIM协作应用《Resolve》
- 函数计算镜像加速:从分钟到秒的跨越