美文网首页Sql
SqlServer 行转列

SqlServer 行转列

作者: 辉辉_teresa | 来源:发表于2020-10-28 19:19 被阅读0次

1

建表,添加测试数据

--删除临时表
if object_id('tempdb..#demo') is not null
     drop table #demo

CREATE TABLE #demo(
    row1 NVARCHAR(10),
    row2 NVARCHAR(10),
    col NVARCHAR(10),
    colval NVARCHAR(10)
);

INSERT INTO #demo (row1,row2,col,colval)VALUES( N'huihui', N'1',N'语文', N'1'  );
INSERT INTO #demo (row1,row2,col,colval)VALUES( N'huihui', N'1',N'数学', N'2'  );
INSERT INTO #demo (row1,row2,col,colval)VALUES( N'huihui', N'1',N'英语', N'3'  );
INSERT INTO #demo (row1,row2,col,colval)VALUES( N'huihui', N'2',N'英语', N'3'  );
INSERT INTO #demo (row1,row2,col,colval)VALUES( N'haha', N'2',N'英语', N'3'  );

表数据如下图:


1.png

行转列sql

--sql
declare  @col varchar(3000)='', @selCol VARCHAR(3000)='',@sql varchar(3000)='';
select @col=@col+',['+[col]+']'  from (select distinct [col] from #demo) a order by [col];
select @selCol=@selCol+',max(['+[col]+']) as '+'['+[col]+']'  from (select distinct [col] from #demo) a order by [col];
select  @col=right(@col,len(@col)-1);
select  @selCol=right(@selCol,len(@selCol)-1);

set @sql='select row1,row2,'+@selCol+
' from( select row1,row2,'+@col +'from #demo a  
pivot (max(colval) for col in('+@col+') 
) as pv ) b group by row1,row2';
exec(@sql);

行转列如下图:


2.png

2

建表,添加测试数据


if object_id('tempdb..#demo') is not null
     drop table #demo

CREATE TABLE #demo(
    sheding NVARCHAR(10),
    pingjun NVARCHAR(10),
    groupType NVARCHAR(10),
    area NVARCHAR(10)
);

INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'1',N'2','11','1区' );
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'3',N'4' ,'11','2区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'5',N'6','11' ,'3区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'7',N'8' ,'11','4区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'9',N'10','11' ,'5区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'11',N'12' ,'11','6区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'13',N'14' ,'11','7区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'15',N'16','11' ,'8区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'17',N'18','11','9区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'19',N'20','11' ,'10区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'21',N'22','11' ,'11区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'23',N'24' ,'11','12区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'25',N'26' ,'11','13区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'27',N'28','11' ,'14区');
INSERT INTO #demo(sheding,pingjun,groupType,area)VALUES(   N'29',N'30' ,'11','15区');

表数据如下:


3.png

行转列sql

select * from (
select [groupType],area + n as columname,v from #demo unpivot(v for n in (sheding,pingjun)) a
) b pivot(max(v) for [columname] 
in (
[1区sheding],[1区pingjun],
[2区sheding],[2区pingjun],
[3区sheding],[3区pingjun],
[4区sheding],[4区pingjun],
[5区sheding],[5区pingjun],
[6区sheding],[6区pingjun],
[7区sheding],[7区pingjun],
[8区sheding],[8区pingjun],
[9区sheding],[9区pingjun],
[10区sheding],[10区pingjun],
[11区sheding],[11区pingjun],
[12区sheding],[12区pingjun],
[13区sheding],[13区pingjun],
[14区sheding],[14区pingjun],
[15区sheding],[15区pingjun]
)) as c;

行转列如下:


4.png

相关文章

  • sql中列转行unpivot、行转列pivot详细讲解||Mys

    目录:一、sqlserver列转行、行转列详解二、Oracle列转行、行转列详解三、DB2列转行、行转列详解四、M...

  • SqlServer 行转列

    1 建表,添加测试数据 表数据如下图: 行转列sql 行转列如下图: 2 建表,添加测试数据 表数据如下: 行转列...

  • SqlServer 多列行转列

    1.原始数据 2.将数据中value1和value2根据co_id显示到一行: 示例代码 --1.创建表 crea...

  • SQLSERVER行转列和列转行

    1: 行转列 子查询,获取一定数据集结果 ``` SELECT objid,action,count(1) AS ...

  • SQL Server行转列

    SQL行转列 经典实例 创建表格 SQL行转列 经典实例 创建表格 行转列 结果 参考链接

  • Oracle 行转列

    行转列,以, 分隔 将行转列语句提取成一个Function

  • MySQL 行转列,列传行

    静态行转列 使用case...when....then 进行行转列 使用IF() 进行行转列 (1)SUM() 是...

  • SQLSERVER之行转列Pivot用法

    未来的一个月时间中,会总结一系列SQL知识点,一次只总结一个知识点,尽量说明白,下面来说说SQL 中常用Pivot...

  • 2018-06-27

    1. hive行转列的实现

  • 行转列

    MySQL建表DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_sco...

网友评论

    本文标题:SqlServer 行转列

    本文链接:https://www.haomeiwen.com/subject/zopcvktx.html