`
jinghuainfo
  • 浏览: 1524715 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

行列互转

 
阅读更多

行列互转


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 行列互转 方便实用,对与中级使用者很有帮助,也对有这方面需求的同学参考。

    sql行列互转

    sql行列互转,存储过程中带输入和输出参数的用法,如何将exec执行结果放入变量中

    SQLServer行列互转实现思路(聚合函数)

    主要介绍了SQLServer行列互转实现思路,使用聚合函数pivot/unpivot实现行列互转,感兴趣的小伙伴们可以参考一下

    行列转换的小工具 可以进行行列互转

    行列转换的小工具 可以进行行列互转,非常好用,

    C#读写Excel表格,行列互转并输出

    实现将excel行数据按行输出到新的excel,并按列展示,开发环境VS2012.可作为转换工具直接使用

    Sql行列互转

    Sql行列互转,很受启发,对Sql表更了解了!

    kettle 行列互转、列拆分为多行、获取文件名等控件使用

    行列互转、列拆分为多行、获取文件名(通配符获取多个路径下的文本文件输入到输出) 行列互转、列拆分为多行、获取文件名(通配符获取多个路径下的文本文件输入到输出) 行列互转、列拆分为多行、获取文件名...

    行列互转工具

    行列互换工具是网络优化中常用的小工具,希望可以方便大家的使用,使用方法简单,转化速度极快。谢谢!

    SQL行转列和列转行-静态互转-动态互转

    有case when方式和2005之后的内置pivot和unpivot方法来实现,行列互转,可以分为静态互转,动态互转。

    sqlserver 行列互转实现小结

    代码如下: –行列互转 /****************************************************************************************************************************************************** 以学生成绩为例子,比较形象...

    简单有用的SQL脚本 (行列互转,查询一个表内相同纪录等)

    行列互转 代码如下: 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,...

    SQL行转列和列转行代码详解

    行列互转,是一个经常遇到的需求。实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现。 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过。为了加深认识,再...

    oracle数据库函数及其使用实例.sql

    该脚本包含递归查询、删除数据表中重复数据、分组取最大记录,行列互转、多行合并等不常见但是非常实用的oracle函数并附带详细的实例持续更新中

    excel,obj 互转 for java 支持2003和2007格式

    excel 转List<Map> 支持2003和2007格式 通过映射第一行列名为字段名进行转换

    电子琴、编曲、序列生成、格式转换、格式整理软件(编程辅助工具)

    6、 多种格式之间的转换,如简繁的互转,GB转换成16进制的互转,GB与UCS2的互转,中英文符号的互转,大小写互转,16进制C与汇编格式互转,16进制与10进制格式互转等。 7、 使用本软件编辑时,可直接将查找的内容...

    万能文本编辑器V1.3

    6、 格式转换:如简繁的互转,GB转换成16进制的互转,GB与UCS2的互转,中英文符号的互转,大小写互转,16进制C与汇编格式互转,16进制与10进制格式互转等; 7、 人性化编辑:本软件拥有很多快捷菜单、操作,经常...

    实用的计算器王 中文免安装

    ★解二阶、三阶和四阶行列式,解二元、三元一次方程组。★计算某一点绕某一点旋转一定角度或弧度后的点的坐标。★求线段的定比分点的坐标。★二次抛物线的顶点式与一般式的互化及求二次抛物线与X轴的交点。★特大...

Global site tag (gtag.js) - Google Analytics