--创建一个临时表用来存储数据
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. 暴力破解-H3C路由器-MSR900

    作者:zptxwd@gmail.com  最后修改日期2017年5月10日    转载请保留出处 声明,本文仅用于技术交流和学习,不得用于任何商业用途及违法行为.   所暴力破解的设备信息 华三路由器 ...

  2. React进阶篇学习

    继续上一次基础篇, 分享一些关于React的进阶技术 React 进阶部分 ** context ** ** setState vs forceUpdate ** ** Mixins ** ** HO ...

  3. Druid + spring 配置数据库连接池

    1. Druid的简介 Druid是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBo ...

  4. C#下载图片,用户选择保存路径

    Html代码 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></ti ...

  5. CRF++的使用(待更新)

    1.下载CRF++(Windows和Linux两个版本) 2.目录如下: 主要用到crf_learn.exe ,crf_test.exe和libcrfpp.dll三个文件 doc文件夹:官方主页 ex ...

  6. 处理webp加所有的jpg到指定路径

    #!/bin/shfunction getdir(){compareName='.webp';for element in `ls $1`dodir_or_file=$1"/"$e ...

  7. git和svn 及git使用&解决上线冲突

    一.svn git的工作流程 git 的工作流程图 二.git的基础使用 git 的安装 1.下载对应版本:https://git-scm.com/download 2.安装git:在选取安装路径的下 ...

  8. spring中spEL常用应用场景

    spEL表达式表示:#{} 一.基本类型值运算操作 {}可以放置数字,字符串,布尔型,表达式(运算,正则,逻辑).这个应用场景和EL表达式一样的,实际中用的也不多. 注意:在XML中表示==,> ...

  9. ArrayList与LinkedList的区别

    两者区别大致分为以下几点: 1.ArrayList采用的是采用的是数组形式保存数据,这种方式将对象放在连续的位置中(线性存储):LinkedList采用的将对象放在独立的空间中,每个空间还保留下一个节 ...

  10. JS - this 总结

    this指向最后调用该函数的对象 // 示例一: var name = "windowsName"; function a() { var name = "Cherry& ...