云服务器网:购买云服务器和VPS必上的网站!

SQL Server数据按行转列的技能研究

随着日趋复杂的数据结构,在数据处理、迁移、统析时,常常因原表行列(Row-Column)顺序不公道而引发读取失误,是利用数据库的必备技能。本文以SQL Server为例,讨论如何利用SQL语句将行转变成列。
假定有以下原数据表:
![](/upload/all

随着日趋复杂的数据结构,在数据处理、迁移、统析时,常常因原表行列(Row-Column)顺序不公道而引发读取失误,是利用数据库的必备技能。本文以SQL Server为例,讨论如何利用SQL语句将行转变成列。

假定有以下原数据表:

![](/upload/allimg/2023/04/24/4h5rpesmjdb.png)

我们现需要对数据以学生ID为单位做分组,将每一个考试科目的终究成绩转换为独立的列,以下表:

![](/upload/allimg/2023/04/24/qru2ugbjydt.png)

可以通过SQL语句将行转变成列,完成上述需求:

“`SQL

SELECT stu_id,

max(CASE WHEN subject=’数学’ THEN score ELSE NULL END) as ‘数学’,

max(CASE WHEN subject=’语文’ THEN score ELSE NULL END) as ‘语文’,

max(CASE WHEN subject=’英语’ THEN score ELSE NULL END) as ‘英语’

FROM exam_table

GROUP BY stu_id;


第一行SELECT用于从语句中获得查询结果,这里会获得原表的stu_id列。

接下来的CASE表达式用于将一行学生的各门成绩拆分成多行记录,其中subject列用于标记各列所对应的科目,最后再把每列的结果用max()函数获得终究的成绩。

最后的GROUP BY语句用于将所有记录依照stu_id按学生进行分组,实现对各科成绩按学生ID分组转列输出。

总之,当我们需要把一个数据表中行转列时,可以结合CASE表达式和GROUP BY等语句,利用SQL实现,比Excel中的拆活或其它繁琐的手工操作更加高效,不但节省工作量,而且可以大大提高工作效力。

本文来源:https://www.yuntue.com/post/236458.html | 云服务器网,转载请注明出处!

关于作者: yuntue

云服务器(www.yuntue.com)是一家专门做阿里云服务器代金券、腾讯云服务器优惠券的网站,这里你可以找到阿里云服务器腾讯云服务器等国内主流云服务器优惠价格,以及海外云服务器、vps主机等优惠信息,我们会为你提供性价比最高的云服务器和域名、数据库、CDN、免费邮箱等企业常用互联网资源。

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注