欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL知识点之列转行Unpivot函数

程序员文章站 2022-04-28 21:01:46
前言 这是总结sql知识点的第二篇文章,一次只总结一个知识点,尽量说明白。上次我们谈到行转列,用的是pivot函数,这次我们来谈谈unpivot函数。(这里是用的数据库是...

前言

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

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

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

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

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

先创建数据

 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 实现行转列

 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用法

总结

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