--创建一个临时表用来存储数据
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 行转列(列的值不规则的数目)的更多相关文章

  1. sql server显示某一列中有重复值的行

    sql server查询一张表 ,显示某一列中有重复值的行,可以这样写: Select * From 表名 where 列名 in(Select 列名 From Table group by 列名 h ...

  2. Ms sql行转列。汇总

    SQL行转列汇总 PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 ...

  3. SQL行转列汇总

    PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P ...

  4. sql 行转列总结

    原文:sql 行转列总结 PIVOT UNPIVOT的用法 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...

  5. SQL Server 行转列,列转行。多行转成一列

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...

  6. SQL行转列 (及EAV模型获取数据)

    参考文章: http://www.williamsang.com/archives/1508.html 情景简介 学校里面记录成绩,每个人的选课不一样,而且以后会添加课程,所以不需要把所有课程当作列. ...

  7. SQL行转列,列转行

    SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM s ...

  8. SQL 行转列和列转行

    SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...

  9. 获取DataTable选择第一行某一列值

    数据源是一个DataTable,现在我们需要获取这个DataTable的第一行第一列的值.先准备一个数据集,创建一个DataTable,并填充数据: source code: using System ...

随机推荐

  1. 拉格朗日乘法与KKT条件

    问题的引出 给定一个函数\(f\),以及一堆约束函数\(g_1,g_2,...,g_m\)和\(h_1,h_2,...,h_l\).带约束的优化问题可以表示为 \[ \min_{X \in R^n}f ...

  2. ef Migration 的一些基础命令

    cmd ci 命令 dotnet ef migrations add NewColum --新增migrations dotnet ef database update--跟新数据库 dotnet e ...

  3. HTTP 请求消息头部实例:

    HTTP 请求消息头部实例: Host:rss.sina.com.cn        //客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号User-Agent:Mozilla/5.0 (W ...

  4. C++对象在继承情况下的内存布局

    1,C++ 中继承是非常重要的一个特性,本节课研究在继承的情形下,C++ 的对象模 型又有什么不同: 2,继承对象模型(最简单的情况下): 1,在 C++ 编译器的内部类可以理解为结构体: 2,子类是 ...

  5. vim编辑Dockerfile时语法高亮

    参考Dockerfile构建容器---语法高亮 三个文件扔进相关的目录即可 1. /usr/share/vim/vimfiles/doc/dockerfile.txt *dockerfile.txt* ...

  6. python3抓取中国天气网不同城市7天、15天实时数据

    思路:1.根据city.txt文档来获取不同城市code2.获取中国天气网7d和15d不同城市url3.利用requests库请求url获取html内容4.利用beautifulsoup获取7d和15 ...

  7. requests实现文件下载, 期间显示文件信息&下载进度_python3

    requests实现文件下载, 期间显示文件信息&下载进度 """使用模块线程方式实现网络资源的下载 # 实现文件下载, 期间显示文件信息&下载进度 # ...

  8. Codeforces - 1203D2 - Remove the Substring (hard version) - 双指针

    https://codeforces.com/contest/1203/problem/D2 上次学了双指针求两个字符串之间的是否t是s的子序列.但其实这个双指针可以求出的是s的前i个位置中匹配t的最 ...

  9. python 3.x报错:No module named 'cookielib'或No module named 'urllib2'

    1.    ModuleNotFoundError: No module named 'cookielib' Python3中,import  cookielib改成 import  http.coo ...

  10. oracle三种表连接方式

    1. 排序合并连接(Sort Merge Join) 排序合并连接的执行过程如下所示: * 将每个行源的行按连接谓词列排序 * 然后合并两个已排序的行源,并返回生成的行源 例如: select * f ...