iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SQL Server中怎么使用Pivot和UnPivot实现行列转换
  • 310
分享到

SQL Server中怎么使用Pivot和UnPivot实现行列转换

2023-06-28 23:06:51 310人浏览 独家记忆
摘要

这篇“sql Server中怎么使用Pivot和UnPivot实现行列转换”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看

这篇“sql Server中怎么使用Pivot和UnPivot实现行列转换”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SQL Server中怎么使用Pivot和UnPivot实现行列转换”文章吧。

先创建一个用于演示的临时表:

create table #temp(    年份    nvarchar(10)    null,    月份    nvarchar(10)    null,    数量    int        null)insert into #temp(年份,月份,数量)select '2015','1','5645' uNIOnselect '2015','2','1234' unionselect '2015','3','7982' unionselect '2016','1','6465' union select '2016','2','7942' unionselect '2016','3','8453' unionselect '2017','1','4653' unionselect '2017','2','1358' unionselect '2017','3','7842' select * from #temp

SQL Server中怎么使用Pivot和UnPivot实现行列转换

下面来实现一些需求:

需求一,按年份分组,不同的月份为一列。

-- 按年份分组,不同的月份为一列select t.年份,sum(case t.月份 when '1' then t.数量 end) '1月份',sum(case t.月份 when '2' then t.数量 end) '2月份',sum(case t.月份 when '3' then t.数量 end) '3月份'from #temp tgroup by t.年份

SQL Server中怎么使用Pivot和UnPivot实现行列转换

另外两种方法:

-- 使用左外连接查询select t.年份,t1.数量 '1月份',t2.数量 '2月份',t3.数量 '3月份' from #temp tleft join (select 年份,数量 from #temp where 月份='1') t1 on t.年份=t1.年份left join (select 年份,数量 from #temp where 月份='2') t2 on t.年份=t2.年份left join (select 年份,数量 from #temp where 月份='3') t3 on t.年份=t3.年份group by t.年份,t1.数量,t2.数量,t3.数量-- 使用自连接查询select t.年份,t1.数量 '1月份',t2.数量 '2月份',t3.数量 '3月份' from #temp t,(select 年份,数量 from #temp where 月份='1') t1,(select 年份,数量 from #temp where 月份='2') t2,(select 年份,数量 from #temp where 月份='3') t3where t.年份=t1.年份 and t.年份=t2.年份 and t.年份=t3.年份group by t.年份,t1.数量,t2.数量,t3.数量

SQL Server中怎么使用Pivot和UnPivot实现行列转换

返回的结果都是一样的,可以看见这几种方法都是可以实现的(当然,可能还有更多的方法待发掘),不过比起第一种方法,后面这两种方法也太低效了吧,比如一年有12个月份的数据,有个七八年的,那得写多少个子查询、表连接的,而且第一种方法也不是我们想要的。那么就需要用到 Pivot 这种方法了。

Pivot 语法:

table_source    -- 表名称,即数据源    PIVOT(    聚合函数(value_column)    -- value_column 要转换为 列值 的列名    FOR pivot_column        -- pivot_column 指定要转换的列    IN(<column_list>)        -- column_list 自定义的目标列名)

因为这里列名不允许指定为数字,真是无语。。。我重建了一个数据结构一模一样的表。

create table #temp(    Name    nvarchar(10)    null,    Course    nvarchar(10)    null,    Score    int        null)insert into #temp(Name,Course,Score)select '小李','语文','88' unionselect '小李','数学','79' unionselect '小李','英语','85' unionselect '小明','语文','79' union select '小明','数学','89' unionselect '小明','英语','87' unionselect '小红','语文','84' unionselect '小红','数学','76' unionselect '小红','英语','92' select * from #tempGo

SQL Server中怎么使用Pivot和UnPivot实现行列转换

select Name 姓名,max(case Course when '语文' then Score end) 语文,max(case Course when '数学' then Score end) 数学,max(case Course when '英语' then Score end) 英语,sum(Score) 课程总分,cast(avg(Score) as decimal(18,2)) 课程平均分from #tempgroup by Name

SQL Server中怎么使用Pivot和UnPivot实现行列转换

使用 Pivot 进行 行转列:

select a.Name 姓名,a.语文,a.数学,a.英语from #temp pivot(    max(Score)    -- 指定作为转换的列的值 的列名    for Course        -- 指定要转换的列的列名    in(语文,数学,英语)    -- 自定义的目标列名,即要转换列的不同的值作为列)

SQL Server中怎么使用Pivot和UnPivot实现行列转换

select a.Name 姓名,a.语文,a.数学,a.英语,b.SumScore 课程总分,b.AvgScore 课程平均分from #temp pivot(    max(Score)    -- 指定作为转换的列的值 的列名    for Course        -- 指定要转换的列的列名    in(语文,数学,英语)    -- 自定义的目标列名,即要转换列的不同的值作为列)a,(    select t.Name,sum(t.Score) SumScore,cast(avg(t.Score) as decimal(18,2)) AvgScore    from #temp t    group by t.Name)bwhere a.Name=b.Name

SQL Server中怎么使用Pivot和UnPivot实现行列转换

UnPivot 语法:

table_source    -- 表名称,即数据源    UNPIVOT(    value_column    -- value_column 要转换为 行值 的列名    FOR pivot_column    -- pivot_column 指定要转换为指定的列    IN(<column_list>)    -- column_list 目标列名)
create table #temp(    Name    nvarchar(10)    null,    Chinese    int    null,    Math    int    null,    English int null)insert into #temp(Name,Chinese,Math,English)select '小李','88','79','85' unionselect '小明','79','89','87' unionselect '小红','84','76','92' select * from #tempgo

SQL Server中怎么使用Pivot和UnPivot实现行列转换

select t.Name 姓名,t.Course 课程,t.Score 分数 from(select t.Name,Course='Chinese',Score=Chinese from #temp tunion allselect t.Name,Course='Math',Score=Math from #temp tunion allselect t.Name,Course='English',Score=English from #temp t) torder by t.Name,t.Course
select t.Name 姓名,t.Course 课程,t.Score 分数 from(select t.Name,'Chinese' Course,Chinese Score from #temp tunion allselect t.Name,'Math',Math from #temp tunion allselect t.Name,'English',English from #temp t) torder by t.Name,t.Course

SQL Server中怎么使用Pivot和UnPivot实现行列转换

使用 UnPivot 进行 列转行:

select t.Name 姓名,t.Course 课程,t.Score 分数 from #temp unpivot (    Score for Course    in(Chinese,Math,English))

SQL Server中怎么使用Pivot和UnPivot实现行列转换

以上就是关于“SQL Server中怎么使用Pivot和UnPivot实现行列转换”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: SQL Server中怎么使用Pivot和UnPivot实现行列转换

本文链接: https://www.lsjlt.com/news/321284.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL Server中怎么使用Pivot和UnPivot实现行列转换
    这篇“SQL Server中怎么使用Pivot和UnPivot实现行列转换”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看...
    99+
    2023-06-28
  • SQL Server如何使用PIVOT与unPIVOT实现行列转换
    这篇“SQL Server如何使用PIVOT与unPIVOT实现行列转换”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这...
    99+
    2023-06-30
  • SQLServer使用PIVOT与unPIVOT实现行列转换
    一、sql行转列:PIVOT 1、基本语法: create table #table1 ( id int ,code varchar(10) , name v...
    99+
    2022-11-13
  • SQLServer使用Pivot和UnPivot实现行列转换的问题小结
    对于行列转换的数据,通常也就是在做报表的时候用的比较多,之前也零零散散的看了一些,今天就来总结一下。 先创建一个用于演示的临时表: create table #temp ( ...
    99+
    2022-11-13
  • 行转列之SQL SERVER PIVOT怎么用
    这篇文章主要介绍行转列之SQL SERVER PIVOT怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在数据库操作中,有些时候我们遇到需要实现“行转列”的需求,例如一下的表为某...
    99+
    2022-10-18
  • 怎么在SQL中使用Unpivot函数实现列转行
    本篇文章为大家展示了怎么在SQL中使用Unpivot函数实现列转行,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。创建数据 CREATE TABL...
    99+
    2022-10-18
  • Oracle中行列转换及pivot子句怎么用
    这篇文章将为大家详细讲解有关Oracle中行列转换及pivot子句怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、11g以前的行列转换方法创建测试表:create...
    99+
    2022-10-19
  • 怎么在SQL中实现行转列和列转行
    怎么在SQL中实现行转列和列转行?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。行列转换就是如下图所示两种展示形式的互相转换行转列假如我们有...
    99+
    2022-10-18
  • SQL Server中怎么将行数据转换为列数据
    今天就跟大家聊聊有关SQL Server中怎么将行数据转换为列数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。准备工作创建表use [t...
    99+
    2022-10-18
  • sql server中怎么实现类型转换
    sql server中怎么实现类型转换,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。记录下 :DECLARE @i  INT;DEC...
    99+
    2022-10-18
  • Sql Server中怎么实现行数据转为列显示
    本篇内容主要讲解“Sql Server中怎么实现行数据转为列显示”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Sql Server中怎么实现行数据转为列显示”吧!场景:行数据...
    99+
    2023-06-30
  • 怎么使用SQL语句将行和列进行转换
    小编给大家分享一下怎么使用SQL语句将行和列进行转换,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  如何使用SQL语句将行和列...
    99+
    2022-10-18
  • SQL Server中怎么实现数据类型转换
    这篇文章将为大家详细讲解有关SQL Server中怎么实现数据类型转换,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1 显式转换显示转换是将某种数据类型的表...
    99+
    2022-10-18
  • SQL Server 中数据类型怎么实现隐式转换
    本篇文章为大家展示了SQL Server 中数据类型怎么实现隐式转换,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。如下所示: CREATE TA...
    99+
    2022-10-18
  • mysql中怎么实现行列转换操作
    这篇文章将为大家详细讲解有关mysql中怎么实现行列转换操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。create table tx(id int pr...
    99+
    2022-10-18
  • mysql5中怎么在使用过程实现行转列
    本篇内容主要讲解“mysql5中怎么在使用过程实现行转列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql5中怎么在使用过程实现行转列”吧!简单到网上搜了...
    99+
    2022-10-18
  • C++中怎么使用cvtColor实现颜色转换
    这篇文章主要讲解了“C++中怎么使用cvtColor实现颜色转换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中怎么使用cvtColor实现颜色转换”吧!前言在我们读取图像时通常会用到...
    99+
    2023-06-30
  • sql server中怎么使用over()函数实现分组统计
    本篇文章为大家展示了sql server中怎么使用over()函数实现分组统计,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。需求:求出以产品类别为分组,各个分组里价...
    99+
    2022-10-18
  • Java怎么使用跳转结构实现队列和栈
    本篇内容介绍了“Java怎么使用跳转结构实现队列和栈”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!队列跳转结构结点public s...
    99+
    2023-07-06
  • 怎么在python中使用format实现一个进制转换功能
    怎么在python中使用format实现一个进制转换功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。10进行十进制,十六进制,八进制,二进制的转换:(#:保留进制前缀)对...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作