科技资讯

通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)

发布日期:2023-07-06    点击次数:123

在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能

一、MSsqlserver中我们通常的用法

1、Sqlserver数据库测试

---创建测试表Createtables([name]nvarchar(50),booknvarchar(50),saledNumberint)----插入测试数据insertintos([name],book,saledNumber)values('小王','java从入门到精通',10);insertintos([name],book,saledNumber)values('小李','java从入门到精通',15);insertintos([name],book,saledNumber)values('小王','C#高级编程',8);insertintos([name],book,saledNumber)values('小李','java从入门到精通',7);insertintos([name],book,saledNumber)values('小王','java从入门到精通',9);insertintos([name],book,saledNumber)values('小李','java从入门到精通',2);insertintos([name],book,saledNumber)values('小王','C#高级编程',3);insertintos([name],book,saledNumber)values('小李','java从入门到精通',5);insertintos([name],book,saledNumber)values('小李','C#高级编程',5);---1、通过casewhen方式SELECT[name],sum(casebookwhen'java从入门到精通'thensaledNumberelse0end)as[java从入门到精通],sum(casebookwhen'C#高级编程'thensaledNumberelse0end)as[C#高级编程],sum(saledNumber)as[sum]fromsgroupby[name]---2、通过pivotselectsa.name,sa.java从入门到精通,sa.C#高级编程,sa.java从入门到精通+sa.C#高级编程as合计froms

pivot(sum(saledNumber)forbookin(java从入门到精通,C#高级编程))sa

二、oracle的用法

---创建测试表Createtables(namevarchar(50),bookvarchar(50),saledNumbernumber(9))----插入测试数据insertintos(name,book,saledNumber)values('小王','java从入门到精通',10);insertintos(name,book,saledNumber)values('小李','java从入门到精通',15);insertintos(name,book,saledNumber)values('小王','C#高级编程',8);insertintos(name,book,saledNumber)values('小李','java从入门到精通',7);insertintos(name,book,saledNumber)values('小王','java从入门到精通',9);insertintos(name,book,saledNumber)values('小李','java从入门到精通',2);insertintos(name,book,saledNumber)values('小王','C#高级编程',3);insertintos(name,book,saledNumber)values('小李','java从入门到精通',5);insertintos(name,book,saledNumber)values('小李','C#高级编程',5);-------1、通过casewhen方式

SELECTname,sum(casebookwhen'java从入门到精通'thensaledNumberelse0end)asjava从入门到精通,sum(casebookwhen'C#高级编程'thensaledNumberelse0end)asC#高级编程,sum(saledNumber)assumfromsgroupbyname;

---2、通过pivot

select*from(selectname,saledNumber,bookfromsgroupbyname,saledNumber,book)

pivot(sum(saledNumber)forbookin('java从入门到精通','C#高级编程'));

描述不清或者有错误的地方,希望大家指正修改,对于oracle中更多关于Pivot和Unpivot

使用简单的SQL以电子表格类型的交叉表报表显示任何关系表中的信息,并将交叉表中的所有数据存储到关系表中。请参考oracle官方实例

---1、通过casewhen方式



上一篇:C语言中的小知识点(1)(涉及unsigned讲解,原码反码补码的讲解,以及指针的讲解)
下一篇:Java基础知识面试题3