服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - 数据库技术 - SQL知识点之列转行Unpivot函数

SQL知识点之列转行Unpivot函数

2021-11-08 16:48DataFrog 数据库技术

这篇文章主要给大家介绍了关于SQL知识点之列转行Unpivot函数的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

这是总结sql知识点的第二篇文章,一次只总结一个知识点,尽量说明白。上次我们谈到行转列,用的是pivot函数,这次我们来谈谈unpivot函数。(这里是用的数据库是sqlserver,与其他数据库是类似的,大家放心看就好)

先看一个小问题SQL知识点之列转行Unpivot函数customercustomer

在这张图中,表示的是顾客用不同手机号给phone1、phone2、phone3拨打电话的情况,但是机灵的你,想变个花样来看看,比如下面这样的。

SQL知识点之列转行Unpivot函数unpivotunpivot

大家想想看如何实现呢?想下,2分钟后再看哟

先创建数据

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create table dbo.customerphones
(
 customerid int primary key, -- fk
 phone1 varchar(32),
 phone2 varchar(32),
 phone3 varchar(32)
);
insert dbo.customerphones
 (customerid, phone1, phone2, phone3)
values
 (1,'705-491-1111', '705-491-1110', null),
 (2,'613-492-2222', null, null),
 (3,'416-493-3333', '416-493-3330', '416-493-3339');
 
 select * from dbo.customerphones

查看数据如下:

SQL知识点之列转行Unpivot函数datadataupivot 实现行转列

?
1
2
3
4
5
6
7
select * from dbo.customerphones -----数据源
 unpivot
(
  phone for phones in (phone1, phone2, phone3)
   ##phone1、phone2、phone3这些列的结果转为行上的结果,成为一列,
  ##并且有了新的列名为phone
) up

结果如下:

SQL知识点之列转行Unpivot函数resultresult

参考文献:

1.use sql server's unpivot operator to help normalize output

2.sql之行转列pivot用法

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。

原文链接:https://ask.hellobi.com/blog/datafrog/35942

延伸 · 阅读

精彩推荐