行列互转
1. 行转成列
一般使用SELECT/UNION法。SELECT表中的一列或几列,再配以常量,形成新表1的列;同样的方法形成新表2的列……最后将这些所有的新表使用UNION (ALL)连接起来。例如:有张学生成绩表如下:(表ta)
想变成(得到如下结果,表tb):
我们就可以使用下面的TSQL:
SELECT 姓名, 课程=’语文’, 分数=语文
FROM ta
UNION ALL
SELECT 姓名, 课程=’数学’, 分数=数学
FROM ta
UNION ALL
SELECT 姓名, 课程=’物理’, 分数=物理
FROM ta
2. 列转成行
一般使用GROUP/CASE法。首先对列中的数据进行分组,将需要变成一行的数据分在一组中,然后对这一组中的数据使用CASE再分成多列即可。同样使用上面的例子,如何从表tb转换成表ta?可以使用下面的TSQL:
SELECT 姓名, 语文=SUM(CASE WHEN 课程=’语文’ THEN 分数 END),
数学=SUM(CASE WHEN 课程=’数学’ THEN 分数 END),
物理=SUM(CASE WHEN 课程=’物理’ THEN 分数 END)
FROM tb
GROUP BY 姓名
再举一个比较常见的例子,分栏打印:将一个表分成多栏打印。还是借用上例中的表,将其输出成下面的格式(分成2栏,每栏4行):
我们该如何解决呢?
a. 首先我们得为表添加一个行字段ID,表tc
b. 根据ID来分组就可以了
SELECT 姓名1= MAX(CASE WHEN CEILING(ID/4.) = 1 THEN 姓名 END),
课程1= MAX(CASE WHEN CEILING(ID/4.) = 1 THEN 课程 END),
分数1= MAX(CASE WHEN CEILING(ID/4.) = 1 THEN 分数 END),
姓名2= MAX(CASE WHEN CEILING(ID/4.) = 2 THEN 姓名 END),
课程2= MAX(CASE WHEN CEILING(ID/4.) = 2 THEN 课程 END),
分数2= MAX(CASE WHEN CEILING(ID/4.) = 2 THEN 分数 END)
FROM tc
GROUP BY ID%4
ORDER BY MIN(ID)
分享到:
相关推荐
sql 行列互转 方便实用,对与中级使用者很有帮助,也对有这方面需求的同学参考。
sql行列互转,存储过程中带输入和输出参数的用法,如何将exec执行结果放入变量中
主要介绍了SQLServer行列互转实现思路,使用聚合函数pivot/unpivot实现行列互转,感兴趣的小伙伴们可以参考一下
行列转换的小工具 可以进行行列互转,非常好用,
实现将excel行数据按行输出到新的excel,并按列展示,开发环境VS2012.可作为转换工具直接使用
Sql行列互转,很受启发,对Sql表更了解了!
行列互转、列拆分为多行、获取文件名(通配符获取多个路径下的文本文件输入到输出) 行列互转、列拆分为多行、获取文件名(通配符获取多个路径下的文本文件输入到输出) 行列互转、列拆分为多行、获取文件名...
行列互换工具是网络优化中常用的小工具,希望可以方便大家的使用,使用方法简单,转化速度极快。谢谢!
有case when方式和2005之后的内置pivot和unpivot方法来实现,行列互转,可以分为静态互转,动态互转。
代码如下: –行列互转 /****************************************************************************************************************************************************** 以学生成绩为例子,比较形象...
行列互转 代码如下: create table test(id int,name varchar(20),quarter int,profile int) insert into test values(1,’a’,1,1000) insert into test values(1,’a’,2,2000) insert into test values(1,’a’,3,...
行列互转,是一个经常遇到的需求。实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现。 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过。为了加深认识,再...
该脚本包含递归查询、删除数据表中重复数据、分组取最大记录,行列互转、多行合并等不常见但是非常实用的oracle函数并附带详细的实例持续更新中
excel 转List<Map> 支持2003和2007格式 通过映射第一行列名为字段名进行转换
6、 多种格式之间的转换,如简繁的互转,GB转换成16进制的互转,GB与UCS2的互转,中英文符号的互转,大小写互转,16进制C与汇编格式互转,16进制与10进制格式互转等。 7、 使用本软件编辑时,可直接将查找的内容...
6、 格式转换:如简繁的互转,GB转换成16进制的互转,GB与UCS2的互转,中英文符号的互转,大小写互转,16进制C与汇编格式互转,16进制与10进制格式互转等; 7、 人性化编辑:本软件拥有很多快捷菜单、操作,经常...
★解二阶、三阶和四阶行列式,解二元、三元一次方程组。★计算某一点绕某一点旋转一定角度或弧度后的点的坐标。★求线段的定比分点的坐标。★二次抛物线的顶点式与一般式的互化及求二次抛物线与X轴的交点。★特大...