mssql sqlserver 不固定行转列数据(动态列)
转自:http://www.maomao365.com/?p=5471
摘要:
下文主要讲述动态行列转换语句,列名会根据行数据的不同,
动态的发生变化
----------------------------------------------------
实现思路:
主要将待生成的动态列名,采用脚本拼接起来,然后采用pivot函数
运行,得到相应的结果
本脚本运行环境:
sql server 2008
/*生成源数据表*/
create table #t
(compname varchar(20),
cheXi varchar(30),
dayInfo int,
daySaleValue int) /*生成源数据*/
insert into #t(compname,cheXi,dayInfo,daySaleValue) values('一汽丰田','锐志','',20)
insert into #t(compname,cheXi,dayInfo,daySaleValue) values('一汽丰田','皇冠','',10)
insert into #t(compname,cheXi,dayInfo,daySaleValue) values('一汽丰田','霸道','',30)
insert into #t(compname,cheXi,dayInfo,daySaleValue) values('一汽丰田','锐志','',40)
insert into #t(compname,cheXi,dayInfo,daySaleValue) values('一汽丰田','RAV4','',60)
insert into #t(compname,cheXi,dayInfo,daySaleValue) values('一汽丰田','锐志','',8)
insert into #t(compname,cheXi,dayInfo,daySaleValue) values('一汽丰田','霸道','',6)
insert into #t(compname,cheXi,dayInfo,daySaleValue) values('一汽丰田','RAV4','',9)
insert into #t(compname,cheXi,dayInfo,daySaleValue) values('一汽丰田','RAV4','',10) /*
select * from
(select compname,daySaleValue,dayInfo,chexi from #t) as d
/*注意事项: pivot所涉及的聚合列 value_column 和 pivot_column
都必须存在 上面的查询表中
*/
pivot(sum(daySaleValue) for dayInfo
in([],[],[],[],[],[],[],[],[],[]))
t ;
*/
/*拼接字符串*/
declare @sql varchar(max)
set @sql =' select * from
(select compname,daySaleValue,dayInfo,chexi from #t) as d
pivot(sum(daySaleValue) for dayInfo
in(
'; /*动态组合列名*/
declare @lieMing varchar(7000) ---定义动态生成列名存放变量
declare @i int ,@imax int,@field varchar(60) ---定义临时循环变量
declare @fieldList table(keyId int identity,field varchar(60)) ---定义临时表,存放待生成动态列名的数据
insert into @fieldList(field) select distinct dayInfo from #t ---生成列名数据 -------------循环表生成列名start--------------
set @lieMing =''
set @i=1
select @imax =max(keyId) from @fieldList t
while @i <@imax
begin
select @field =field from @fieldList t where t.keyId=@i
if isnull(@field,'') !=''
begin
if @lieMing !='' begin set @lieMing =@lieMing +',' end
set @lieMing = @lieMing+'['+@field+']';
end
set @i=@i+1
end
-------------循环表生成列名end--------------
/*动态组合列*/ set @sql =@sql +@lieMing +' )) t ;'; ---拼接sql语句
exec (@sql) ---执行sql脚本,生成相关数据 truncate table #t
drop table #t

mssql sqlserver 不固定行转列数据(动态列)的更多相关文章
- SSRS实现 矩阵列实现动态列
需求背景:按区域查询店铺的销售量和库存量,然后店铺的数据是动态的.实现类似效果如下图,其中蓝色框是动态的,店铺的数量是不确定的,可能是3个,也可能是20个. 步骤一: 步骤二: 加工后: 最后效果:
- Oracle笔记(七) 数据更新、事务处理、数据伪列
一.数据的更新操作 DML操作语法之中,除了查询之外还有数据的库的更新操作,数据的更新操作主要指的是:增加.修改.删除数据,但是考虑到emp表以后还要继续使用,所以下面先将emp表复制一份,输入如下指 ...
- mysql两表合并,对一列数据进行处理
加班一时爽,一直加班~一直爽~ 欢迎收看http://www.996.icu/ 今天弄了下MySQL中两表合并的并且要处理一列数据,这列数据原来都是小写字母,处理时将这列数据改成驼峰命名的~~ 基本 ...
- mssql sqlserver 将逗号分隔的一列数据转换为多列数据的方法分享
转自:http://www.maomao365.com/?p=10278 摘要: 下文讲述sqlserver中将使用逗号组合的单列数据,分隔为多列数据的方法 实验环境:sql server 2012 ...
- mssql sqlserver 可以存储二进制数据的字段类型详解
转自: http://www.maomao365.com/?p=6738 摘要: 下文将从数据库的数据类型着手,剖析在sqlserver数据库中可以存储二进制数据的数据类型,如下所示: mssql s ...
- C# 使用Epplus导出Excel [1]:导出固定列数据
C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...
- jQqery EasyUI dategrid行中多列数据的可编辑操作
最近的项目中需要在前台dategrid列表中直接修改某些列的数据,并且修改后的数据需要不通过后台而自动更新在列表中. 带着这一问题开始寻找实现的思路,首先想到的就是去jQqery EasyUI官网找例 ...
- FPGA计算3行同列数据之和
实验:FPGA计算3行同列数据之和 实验要求:PC机通过串口发送3行数据(一行有56个数据,3行共有56*3=168个数据)给FPGA,FPGA计算3行同一列数据的和,并将结果通过串口返回给上位机. ...
- SQL两列数据,行转列
SQL中只有两列数据(字段1,字段2),将其相同字段1的行转列 转换前: 转换后: --测试数据 if not object_id(N'Tempdb..#T') is null drop table ...
随机推荐
- Cookie与 Session使用详解
Cookie概念 在浏览某些 网站 时,这些网站会把 一些数据存在 客户端 , 用于使用网站 等跟踪用户,实现用户自定义 功能. 是否设置过期时间: 如果不设置 过期时间,则表示这个 Cookie生命 ...
- Redis数据结构简介
Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为STRING(字符串).LIST(列表).SET(集合).HASH(散列)和ZSET(有序集合).有一部分Redis命令对 ...
- linux线程及互斥锁
进程是资源管理的最小单元,线程是程序执行的最小单元.在操作系统的设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开销. 就像进程有一个PID一样,每个线程也有 ...
- Oracle-08:连接查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 首先提供数据库脚本,供测试使用 create table DEPT ( deptno ) not null, ...
- Flask开发微电影网站(二)
1.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库 在CentOS虚拟机,进入MaridDB数据库提示符,创建movie数据库 create ...
- Get Docker CE for CentOS
To get started with Docker CE on CentOS, make sure you meet the prerequisites, then install Docker. ...
- ucloud中的udisk错误“Read-only file system”修复指南
当udisk写入数据提示错误:"Read-only file system",按照下面的方法修复: 1. 停止使用对应udisk的业务 如果有未知的进程正在操作这个硬盘,可使用命 ...
- win7 telnet命令无法开启的解决方案(不是内部命令或外部命令)
如果你想在win 7上直接使用 telnet命令,却不能开启那怎么办呢?记得在Wingdows XP上telnet都是已经安装好的,直接就可用,但是Win7是没有这个功能的,都需要后来自己安装的,下面 ...
- DW自动换行
查看→代码视图选项→自动换行
- 一次完整的HTTP网络请求过程详解
0. 前言 从我们在浏览器的地址栏输入http://blog.csdn.net/seu_calvin后回车,到我们看到该博客的主页,这中间经历了什么呢?简单地回答这个问题,大概是经历了域名解析.TC ...