SQL 行转列(列的值不规则的数目)
--创建一个临时表用来存储数据
create table #tmp_SNValue_Table (FieldName nvarchar(20), [Value] nvarchar(max)) insert into #tmp_SNValue_Table
select 'DDUDF01','123456789012345'
insert into #tmp_SNValue_Table
select 'DDUDF01','123456789012346'
insert into #tmp_SNValue_Table
select 'DDUDF02','123456789012347' select * from #tmp_SNValue_Table
目前的效果:

--定义一个变量存储SQL语句
declare @ls_TSQL nvarchar(max) ='' --用来存储需要查询出来的列(column).
DECLARE @ls_FieldName NVARCHAR(100) --动态列. (ColumnName1,ColumnName2)
SELECT @ls_FieldName=ISNULL(@ls_FieldName+',','')+ QUOTENAME(FieldName) FROM #tmp_SNValue_Table GROUP BY FieldName --查询并且 行转列(包含空列, 不规则的数目)
set @ls_TSQL = @ls_TSQL+ '
SELECT '+@ls_FieldName+' FROM (
SELECT FieldName,value,row_number() over (partition by FieldName ORDER BY FieldName ASC) rowno
FROM #tmp_SNValue_Table) r PIVOT(max(value) FOR FieldName IN('+@ls_FieldName+') )g '
print @ls_TSQL
exec(@ls_TSQL)
想要的效果(只是做查询, 不做动态insert)

如果需要动态列插入
create table #tmp_Sca_Pac_Dtl(
DDUDF01 nvarchar(100) null,
DDUDF02 nvarchar(100) null,
DDUDF03 nvarchar(100) null,
DDUDF04 nvarchar(100) null,
DDUDF05 nvarchar(100) null,
DDUDF06 nvarchar(100) null,
DDUDF07 nvarchar(100) null,
DDUDF08 nvarchar(100) null,
DDUDF09 nvarchar(100) null,
DDUDF10 nvarchar(100) null,
DDUDF11 nvarchar(100) null,
DDUDF12 nvarchar(100) null,
DDUDF13 nvarchar(100) null,
DDUDF14 nvarchar(100) null,
DDUDF15 nvarchar(100) null,
DDUDF16 nvarchar(100) null,
DDUDF17 nvarchar(100) null,
DDUDF18 nvarchar(100) null,
DDUDF19 nvarchar(100) null,
DDUDF20 nvarchar(100) null
) declare @ls_TSQL nvarchar(max) =''
DECLARE @ls_FieldName NVARCHAR(100)
SELECT @ls_FieldName=ISNULL(@ls_FieldName+',','')+ QUOTENAME(FieldName) FROM #tmp_SNValue_Table GROUP BY FieldName
--动态插入另一个Temp table里面
set @ls_TSQL = 'insert into #tmp_Sca_Pac_Dtl ('+@ls_FieldName+')' --set @ls_TSQL = 'insert into #tmp_Sca_Pac_Dtl ('+@ls_FieldName+')'
set @ls_TSQL = @ls_TSQL+ '
SELECT '+@ls_FieldName+' FROM (
SELECT FieldName,value,row_number() over (partition by FieldName ORDER BY FieldName ASC) rowno
FROM #tmp_SNValue_Table) r PIVOT(max(value) FOR FieldName IN('+@ls_FieldName+') )g '
print @ls_TSQL
exec(@ls_TSQL)
select * from #tmp_Sca_Pac_Dtl
效果

SQL 行转列(列的值不规则的数目)的更多相关文章
- sql server显示某一列中有重复值的行
sql server查询一张表 ,显示某一列中有重复值的行,可以这样写: Select * From 表名 where 列名 in(Select 列名 From Table group by 列名 h ...
- Ms sql行转列。汇总
SQL行转列汇总 PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 ...
- SQL行转列汇总
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P ...
- sql 行转列总结
原文:sql 行转列总结 PIVOT UNPIVOT的用法 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- SQL Server 行转列,列转行。多行转成一列
一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...
- SQL行转列 (及EAV模型获取数据)
参考文章: http://www.williamsang.com/archives/1508.html 情景简介 学校里面记录成绩,每个人的选课不一样,而且以后会添加课程,所以不需要把所有课程当作列. ...
- SQL行转列,列转行
SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM s ...
- SQL 行转列和列转行
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...
- 获取DataTable选择第一行某一列值
数据源是一个DataTable,现在我们需要获取这个DataTable的第一行第一列的值.先准备一个数据集,创建一个DataTable,并填充数据: source code: using System ...
随机推荐
- v-if 和v-show的区别
在切换 v-if 块时,Vue.js 有一个局部编译/卸载过程,因为 v-if 之中的模板也可能包括数据绑定或子组件.v-if 是真实的条件渲染,因为它会确保条件块在切换当中合适地销毁与重建条件块内的 ...
- 图片下载&&非同源图片下载&&同源下载&&网页点击下载图片
非同源图片下载(html添加canvas标签) 方法1: downloadImgByBase64(url){ console.log() // 创建隐藏的可下载链接 // let blob = ...
- Linux 命令 watch 监测命令的运行结果
watch 命令周期性地执行命令,全屏显示输出命令.watch命令可以监测一个命令的运行结果 命令参数 -n, --interval 设置间隔时间.默认情况下,watch 每隔 2 秒执行一次命令. ...
- 学习Linux第一周记
2019/11/25 服务器硬件详述1) CPU 作用:运算/控制 关注信息 :路数 服务器中CPU的颗数 一般有 (单路 双路 ...
- springboot(十五)-Runner启动器
Runner启动器 如果你想在Spring Boot启动的时候运行一些特定的代码,你可以实现接口ApplicationRunner或者CommandLineRunner,这两个接口实现方式一样,它们都 ...
- vscode如何使用?常用插件有哪些?
vscode下载 官网下载:https://code.visualstudio.com/ 一.汉化中文(官方下载默认为英文,英文好的小伙伴可直接跳过这步) 点击插件按钮搜索 Chinese, 在弹出的 ...
- 传输层协议之TCP/UDP
1.UDP UDP协议是面向无连接的,即不需要在正式传递数据前先链接双方,UDP协议只是数据报文的搬运工,不保证有序且不丢失的传递到对端,且UDP协议无任何控制流量的算法,UDP相对于TCP更加轻便. ...
- CentOS7 yum安装配置 +redis主从配置
一.安装必要包 yum install gcc 二.linux下安装 #下载 wget http://download.redis.io/releases/redis-3.0.0.tar.gz tar ...
- WebView获取title更改
[self.titleLabel setText:[self.webVIew stringByEvaluatingJavaScriptFromString:@"document.title& ...
- 负载均衡实现,一个域名对应多个IP地址【转载】
使用负载均衡实现,传统和常规做法,其他方式需要特殊处理.(dns轮询,或者自己做解析)1.一个域名设定多个dns服务或者服务器进行解析,同一个域名的每个解析都指向不同的ip地址,这样应答快的dns优先 ...