当前位置: 代码网 > it编程>数据库>MsSqlserver > 玩转-SQL2005数据库行列转换

玩转-SQL2005数据库行列转换

2024年05月18日 MsSqlserver 我要评论
注意:列转行的方法可能是我独创的了,呵呵,因为在网上找不到哦,全部是我自己写的,用到了系统的syscolumns(一)行转列的方法先说说行转列的方法,这个就比较好想了,利用拼sql和case when

注意:列转行的方法可能是我独创的了,呵呵,因为在网上找不到哦,全部是我自己写的,用到了系统的syscolumns

(一)行转列的方法

先说说行转列的方法,这个就比较好想了,利用拼sql和case when解决即可

实现目的

 

1:建立测试用的数据库

2:加入测试用的数据库(先加入整齐的数据)

3:设计想法

  行转列的原理就是把行的类别找出来当做查询的字段,利用case when 把当前的分数加到当前的字段上去,最后用group by 把数据整合在一起

4:通用方法

说明: 把所有的课程名称取出来作为列(查询表tcourse)

        用case when 的方法把sql 拼出来

5:课外试验

(1)加入数据

去除max 方法会报错,因为一条可能对应多行数据

(2)加入数据

数据会多出一列,但是其他人无此课程就会为0

至此,数据行转列ok

(二)列转行的新方法开始了

实现目的

1:实现原理

在网上看了别人的做法,基本都是用union all 来一个个转换的,我觉得不太好用。

首先我想到了要把所有的列名取出来,就在网上查了下获取表的所有列名

 然后我可以把主表和列名形成的表串起来,这样就可以形成需要的列数,然后根据判断取值就完成了了,呵呵

2:建立表格

3:加入数据

4:经典的地方来了

你没看错,一句话搞定,但是有个问题迷惑了我,我觉得还不够简化,如果可以把case when 都不用了就更好了,请大神们指点小弟一下了。怎么根据

col的name 直接取得分数

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com