随着日趋复杂的数据结构,在数据处理、迁移、统析时,常常因原表行列(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 | 云服务器网,转载请注明出处!