sql行转列三种方式_使用sql实现行转列的查询

sql行转列三种方式_使用sql实现行转列的查询在SQL Server中使用SQL实现行转列、列转行,可以使用多种方法,在SQL 2005以前可以使用case when then…语句,但这种方法的问题在于列举的列名要写死,如果列名很多,case when 语句会很长,并不优雅。所以需要SQL Server提供新的语句能够实现。在2005版本

在SQL Server中使用SQL实现行转列、列转行,可以使用多种方法,在SQL 2005以前可以使用case when then…语句,但这种方法的问题在于列举的列名要写死,如果列名很多,case when 语句会很长,并不优雅。所以需要SQL Server提供新的语句能够实现。在2005版本就推出了pivot/unpivot关键字,可以方便的实现。这方面的资料已经很多,这里提供一个简单的示例,以便快速上手。

一、SQL列转行

假设有一张表,结构和数据是这样子的:

sql行转列三种方式_使用sql实现行转列的查询

想转换为如下的形式:

sql行转列三种方式_使用sql实现行转列的查询

这个就是典型的列转行的形式,需要使用unpivot。

SQL实现:

select 姓名,科目, val from [dbo].[科目成绩]
unpivot (val for 科目 in([语文],[数学],[英语])) as u

二、SQL行转列

现在假设已经有了这张表:

sql行转列三种方式_使用sql实现行转列的查询

我们借用上面的SQL得到的临时表,将其还原为:

sql行转列三种方式_使用sql实现行转列的查询

这是典型的行转列的实现,需要用到pivot。

SQL实现:

with aa as(
select 姓名,科目, val from [dbo].[科目成绩]
unpivot (val for 科目 in([语文],[数学],[英语])) as u)

select * from aa pivot(max(val) for 科目 in ([语文],[数学],[英语])) as tt
order by [语文] desc,[数学] desc,[英语] desc;

得到如下表格:

sql行转列三种方式_使用sql实现行转列的查询

按照语文、数学、英语的分数依次降序排列。

今天的文章sql行转列三种方式_使用sql实现行转列的查询分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/51815.html

(0)
编程小号编程小号
上一篇 2023-08-31
下一篇 2023-08-31

相关推荐

发表回复

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