在SQL Server中使用SQL实现行转列、列转行,可以使用多种方法,在SQL 2005以前可以使用case when then...语句,但这种方法的问题在于列举的列名要写死,如果列名很多,case when 语句会很长,并不优雅。所以需要SQL Server提供新的语句能够实现。在2005版本就推出了pivot/unpivot关键字,可以方便的实现。这方面的资料已经很多,这里提供一个简单的示例,以便快速上手。
一、SQL列转行
假设有一张表,结构和数据是这样子的:
想转换为如下的形式:
这个就是典型的列转行的形式,需要使用unpivot。
SQL实现:
select 姓名,科目, val from [dbo].[科目成绩]
unpivot (val for 科目 in([语文],[数学],[英语])) as u
二、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;
得到如下表格:
文章来源:https://www.toymoban.com/news/detail-719089.html
按照语文、数学、英语的分数依次降序排列。文章来源地址https://www.toymoban.com/news/detail-719089.html
到了这里,关于SQL行转列、列转行(SQL Server版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!