SQL pivot 行转列
2016-04-01 17:22
190 查看
--CREATE TABLE [dbo].[Pivot_Test]( -- [UserName] [nvarchar](50) NOT NULL, -- [Gains] [decimal](18, 2) NOT NULL, -- [GainsType] [nvarchar](50) NOT NULL --) ON [PRIMARY] GO --INSERT INTO Pivot_Test(UserName,Gains,GainsType) values('a','1','i1') --INSERT INTO Pivot_Test(UserName,Gains,GainsType) values('a','1','i2') --INSERT INTO Pivot_Test(UserName,Gains,GainsType) values('a','1','i3') --INSERT INTO Pivot_Test(UserName,Gains,GainsType) values('b','1','i1') --INSERT INTO Pivot_Test(UserName,Gains,GainsType) values('b','1','i2') --INSERT INTO Pivot_Test(UserName,Gains,GainsType) values('c','1','i1') --INSERT INTO Pivot_Test(UserName,Gains,GainsType) values('c','1','i2') --INSERT INTO Pivot_Test(UserName,Gains,GainsType) values('d','1','i1') --INSERT INTO Pivot_Test(UserName,Gains,GainsType) values('d','1','i2') select * from Pivot_Test DECLARE @sql NVARCHAR(4000) SELECT @sql = ISNULL(@sql + ',', '') + GainsType FROM Pivot_Test GROUP BY GainsType PRINT @sql IF ( CHARINDEX(@sql, ',') = 0 ) BEGIN EXEC ('select * from Pivot_Test a pivot (sum(Gains) for GainsType in (' + @sql + ')) b')--可以使用 END -------------------------------------------------------------------------------------------------------------- --CREATE TABLE [dbo].[Pivot_TestNew]( -- [UserName] [nvarchar](50) NOT NULL, -- [Gains] [decimal](18, 2) NOT NULL, -- [GainsType] [nvarchar](50) NOT NULL --) ON [PRIMARY] --INSERT INTO Pivot_TestNew(UserName,Gains,GainsType) values('a','1','i1 1') --INSERT INTO Pivot_TestNew(UserName,Gains,GainsType) values('a','1','i2 1') --INSERT INTO Pivot_TestNew(UserName,Gains,GainsType) values('a','1','i3 1') --INSERT INTO Pivot_TestNew(UserName,Gains,GainsType) values('b','1','i1 1') --INSERT INTO Pivot_TestNew(UserName,Gains,GainsType) values('b','1','i2 1') --INSERT INTO Pivot_TestNew(UserName,Gains,GainsType) values('c','1','i1 1') --INSERT INTO Pivot_TestNew(UserName,Gains,GainsType) values('c','1','i2 1') --INSERT INTO Pivot_TestNew(UserName,Gains,GainsType) values('d','1','i1 1') --INSERT INTO Pivot_TestNew(UserName,Gains,GainsType) values('d','1','i2 1') select * from Pivot_TestNew DECLARE @sql2 NVARCHAR(4000) SELECT @sql2 = ISNULL(@sql2 + ',', '') + REPLACE(GainsType,' ','_') FROM (select * FROM Pivot_TestNew group by GainsType,Gains,UserName ) tt GROUP BY GainsType PRINT @sql2 IF ( CHARINDEX(@sql2, ',') = 0 ) BEGIN EXEC ('select * from( select UserName,ISNULL(Gains, ''0'') AS Gains,REPLACE(GainsType,'' '',''_'') AS GainsType FROM Pivot_TestNew group by GainsType,Gains,UserName ) tt pivot (sum(Gains) for GainsType in (' + @sql2 + ')) b')--可以使用 END --REPLACE(GainsType,'' '',''_'') --ISNULL(REPLACE(GainsType,'' '',''_''),0) --REPLACE(ISNULL(GainsType,0),'' '',''_'') ----------------------------如果有空格替换(REPLACE)空格,有NULL值(ISNULL)替换NULL值---------------------------- EXEC('SELECT REPLACE(UserName,'' '',''_'') AS UserName,ISNULL(Gains, ''0'') AS Gains,GainsType FROM Pivot_Test')
相关文章推荐
- Mysql 删除重复记录,只保留最小的一条
- 极验高并发验证服务背后的技术实现
- oracle函数trunc的使用
- ORACLE表空间
- 关于SQL Server将一列的多行内容拼接成一行
- Oracle 使用DBMS_SCHEDULER创建定时任务
- 数据库连接池
- Oracle 主键
- Spark-Sql版本升级对应的新特性汇总
- SQL Server自动化运维系列——批量执行SQL脚本(Power Shell)
- PLSQL连Oracle数据库Could not load "……\bin\oci.dll"
- Oracle和Sql 日期格式与字符串格式相互转换
- 禁用启用oracle数据库中所有约束(c#实现)
- Redis详解
- Mysql编辑工具中使用(Navicat查询结果显示行号)
- Redis 环境安装与C++接口
- mybatis - 连接mysql数据库插入中文乱码
- mysql清空表delete和truncate命令介绍
- redis sentinel配置
- SQLite 3.7.13的加密解密