文章详情页
SQL Server使用PIVOT与unPIVOT实现行列转换
浏览:309日期:2023-03-06 14:25:24
一、sql行转列:PIVOT
1、基本语法:
create table #table1 ( id int ,code varchar(10) , name varchar(20) );goinsert into #table1 ( id,code, name ) values ( 1, "m1","a" ), ( 2, "m2",null ), ( 3, "m3", "c" ), ( 4, "m2","d" ), ( 5, "m1","c" );goselect * from #table1;--方法一(推荐)select PVT.code, PVT.a, PVT.b, PVT.c from #table1 pivot(count(id) for name in(a, b, c)) as PVT;--方法二with P as (select * from #table1)select PVT.code, PVT.a, PVT.b, PVT.c from Ppivot(count(id) for name in(a, b, c)) as PVT;drop table #table1;
结果:

2、实例:

3、传统方式:(先汇总拼接出所需列的字符串,再动态执行转列)
先查询出要转为列的行数据,再拼接字符串。
create table #table1 ( id int ,code varchar(10) , name varchar(20) );goinsert into #table1 ( id,code, name ) values ( 1, "m1","a" ), ( 2, "m2",null ), ( 3, "m3", "c" ), ( 4, "m2","d" ), ( 5, "m1","c" );goselect * from #table1;declare @strCN nvarchar(100);select @strCN = isnull(@strCN + ",", "") + quotename(name) from #table1 group by name ;print @strCN --‘[a],[c],[d]"declare @SqlStr nvarchar(1000);set @SqlStr = N"select * from #table1 pivot ( count(ID) for name in (" + @strCN + N") ) as PVT";exec ( @SqlStr );drop table #table1;结果:

二、sql列转行:unPIVOT:
基本语法:
create table #table1 (id int,code varchar(10),name1 varchar(20),name2 varchar(20),name3 varchar(20));goinsert into #table1(id, name1, name2, code, name3)values(1, "m1", "a1", "a2", "a3"), (2, "m2", "b1", "b2", "b3"), (4, "m1", "c1", "c2", "c3");goselect * from #table1;--方法一select PVT.id, PVT.code, PVT.name, PVT.val from #table1 unpivot(val for name in(name1, name2, name3)) as PVT;--方法二with P as (select * from #table1)select PVT.id, PVT.code, PVT.name, PVT.val from P unpivot(val for name in(name1, name2, name3)) as PVT;drop table #table1;
结果:

实例:

到此这篇关于SQL Server使用PIVOT与unPIVOT实现行列转换的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
标签:
MsSQL
相关文章:
1. VS连接SQL server数据库及实现基本CRUD操作2. sql server日期时间函数3. sql server设置两个主键的方法4. SQL Server 2005 读取xml 文件 突破 varchar 8000 限制5. SQL Server 2005 中能够使用 Try...Catch语句6. SQL Server 2005使用基于行版本控制的隔离级别初探(1)7. SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询8. SQL Server 2008数据库引擎优化顾问与索引优化向导之间的差别9. MYSQL SERVER收缩日志文件实现方法10. 如何查看SQL SERVER的版本
排行榜

网公网安备