sql行列转换

Posted 工作在浏览器上人-YangBobin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql行列转换相关的知识,希望对你有一定的参考价值。

一、sql行转列:PIVOT

1、基本语法:

create table #table1
    (    id int ,code varchar(10) , name varchar(20) );
go

insert into #table1 ( id,code, name ) values ( 1, \'m1\',\'a\' ), ( 2,  \'m2\',null ), ( 3, \'m3\', \'c\' ), ( 4,  \'m2\',\'d\' ), ( 5,  \'m1\',\'c\' );
go

select * 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 P        pivot(count(id) for name in(a, b, c)) as PVT;
drop table #table1;

结果:

image

2、实例:

3、传统方式:(先汇总拼接出所需列的字符串,再动态执行转列)

先查询出要转为列的行数据,再拼接字符串。

create table #table1
    (    id int ,code varchar(10) , name varchar(20) );
go

insert into #table1 ( id,code, name ) values ( 1, \'m1\',\'a\' ), ( 2,  \'m2\',null ), ( 3, \'m3\', \'c\' ), ( 4,  \'m2\',\'d\' ), ( 5,  \'m1\',\'c\' );
go

select * 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;

结果:

image

二、sql列转行:unPIVOT:

基本语法:

create table #table1 (id int,
code varchar(10),
name1 varchar(20),
name2 varchar(20),
name3 varchar(20));
go
insert into #table1(id, name1, name2, code, name3)
values(1, \'m1\', \'a1\', \'a2\', \'a3\'),
    (2, \'m2\', \'b1\', \'b2\', \'b3\'),
    (4, \'m1\', \'c1\', \'c2\', \'c3\');
go
select * 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;

结果:

image

实例:

以上是关于sql行列转换的主要内容,如果未能解决你的问题,请参考以下文章

sql动态实现行列转换

sql行列转换和累加问题~~~

[高分悬赏] sql 行列转换 请高人指点

sql server行列转换问题

SQL行列转换

写sql,怎么将查询结果的行列转换呀?