美文网首页
Sql 行转列

Sql 行转列

作者: 过桥 | 来源:发表于2015-09-11 14:33 被阅读586次

实现效果

原始数据

原始表原始表

转换后数据

转换后表转换后表

示例代码

/****** 删除表******/
IF EXISTS  (SELECT  * FROM dbo.SysObjects WHERE ID = object_id(N'[T_Test_RowToColumn]') AND OBJECTPROPERTY(ID, 'IsTable') = 1) 
drop table T_Test_RowToColumn

/****** 新建测试表,插入测试数据******/
create table T_Test_RowToColumn(PointName nvarchar(20) ,ItemName nvarchar(20) , Value float )
insert into T_Test_RowToColumn values('点位1' ,'监测项目1', 0.1)
insert into T_Test_RowToColumn values('点位1' ,'监测项目2', 0.2)
insert into T_Test_RowToColumn values('点位1' ,'监测项目3', 0.3)
insert into T_Test_RowToColumn values('点位2' ,'监测项目1', 0.2)
insert into T_Test_RowToColumn values('点位2' ,'监测项目2', 0.4)
insert into T_Test_RowToColumn values('点位2' ,'监测项目3', 0.6)
go

/****** 查询转换前原始表******/
select * from T_Test_RowToColumn
go

/*方法一 关键字case*/ 
/****** 分析过程使用case方式,添加列******/
select PointName,(case ItemName when '监测项目1' then Value end ) as '监测项目1',
(case ItemName when '监测项目2' then Value end ) as '监测项目2',
(case ItemName when '监测项目3' then Value end ) as '监测项目3'
from T_Test_RowToColumn 
go

/****** 静态实现(适合需要列少、固定的形式) ******/
select PointName,max(case ItemName when '监测项目1' then Value end ) as '监测项目1',
max(case ItemName when '监测项目2' then Value end ) as '监测项目2',
max(case ItemName when '监测项目3' then Value end ) as '监测项目3'
from T_Test_RowToColumn group by PointName
go

/****** 动态实现(适合需要列不固定的形式) ******/
declare @sql varchar(8000)
set @sql = 'select PointName '
select @sql = @sql + ' , max(case ItemName when ''' + 监测项目 + ''' then Value end) [' + 监测项目 + ']'
from (select distinct ItemName as 监测项目 from T_Test_RowToColumn) as a
set @sql = @sql + ' from T_Test_RowToColumn group by PointName'
exec(@sql) 
go

/*方法二 关键字pivot*/ 
/****** 静态实现(Sql Server 2005及以上) ******/
select * from (select * from T_Test_RowToColumn) a pivot (max(Value) for ItemName in (监测项目1,监测项目2,监测项目3)) b
go

/****** 动态实现(Sql Server 2005及以上) ******/
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + ItemName from T_Test_RowToColumn group by ItemName
set @sql = '[' + @sql + ']'
exec ('select * from (select * from T_Test_RowToColumn) a pivot (max(Value) for ItemName in (' + @sql + ')) b')
go

相关文章

  • SQL Server行转列

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

  • SqlServer 行转列

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

  • SQL 行转列

    对于这样一个表: 查询出这样一个结果: 这是怎样一个原理呢?去掉这个SQL最后边的group by name,查询...

  • Sql 行转列

    实现效果 原始数据 转换后数据 示例代码

  • 数据库表行列转换

    行转列 创建表kecheng,并插入数据 查询该表,结构显示: 通过sql查询显示下图: SQL_A: SQL_B...

  • sql行转列,列转行

    行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL ...

  • Power Query 系列 (08) - 行转列案例

    行转列是一种常见的数据处理操作,所以对如何在 SQL 语句中、如何在 pandas 中实现这种行转列做过一些总结。...

  • sql行转列应用

    sql行转列应用 数据表实际存储格式原始表为了适应我们某个平台框架的使用(该框架直接配置sql,平台自动实现数据的...

  • SQL行转列-列转行

    SQL行转列-列转行 一、行转列 建表语句 插入数据 查询数据表中的内容(即转换前的结果) 先来看一下转换后的结果...

  • oracle行列转换

    行转列 建表、插数 转换方式 CASE DECODE PIVOT wmsys.wm_concat PL/SQL 列...

网友评论

      本文标题:Sql 行转列

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