在做一些视图,报表或者查询的时候,列转行是必须要做的,甚至有多列要转。
SQLSERVER中实现 基本思路是这样的
1 查出所需要数据放在视图1中,且在同一行中将第一次要转的字符串拼成1个长字符串;用+,相当于ORC的||
2 创建一个合并函数1 ,作用是动态SQL将在视图1中同一列中满足条件的字符串再拼成一个长字符串
3 调用这个合并函数1,将第一次列转行的数据存成视图2,同时也可将第二次列转行的同一行中要转的字符串拼成1个长字符串
4 创建一个合并函数2 ,作用是动态SQL将在视图1中同一列中满足条件的字符串再拼成一个长字符串
5 调用这个合并函数1,将第一次列转行的数据存成视图3...
以此类推...
注意:如果数据中有空值得话,用函数转换的时候会报substring 传递值错误。所以对于有空置的列,需要用isnull 判断赋值
可能上面的描述有点拗口,其实对于 SQL多列转行,先可以对现有数据分成几个大列,每次写一个合并函数,对其中的一个大列进行列转行操作。
操作后的数据,再针对其写第二个合并函数,继续对另外的大列进行列转行。直到满足要求为止。
我所找到的办法 基本思路就是这样了,感觉貌似是个笨办法。
很久没碰ORC了,不知道ORC有没有更好的办法。
上段代码,举个小例
--sql server 2000中的写法.
create table tb(name varchar(10), work varchar(10), startime int, endtime int , remark varchar(20))
_insert into tb values('张三', '程序员' , 1 , 3,'小伙子不错')
_insert into tb values('张三', '程序员' , 2 , null,'小伙子不错')
_insert into tb values('张三', '程序员' , 3 , null,'小伙子不错')
_insert into tb values('李四', '项目经理', 5 , null,'有前途')
_insert into tb values('李四', '项目经理', 7 , 10,'有前途')
_insert into tb values('王五', '技术总监', 10, null,'真棒')
go
--创建一个合并的函数
create function f_hb(@name varchar(10),@work varchar(10), @remark varchar(20))
returns varchar(8000)
as
begin
_declare @str varchar(8000)
set @str = ''
_select @str = @str + ',' + cast(time as varchar) from
(
_select name,work,remark,time = case when endtime is not null then cast(startime as varchar) + '-' + cast(endtime as varchar) else cast(startime as varchar) end from tb
) t
where name = @name and work = @work and remark = @remark
set @str = right(@str , len(@str) - 1)
return(@str)
End
go
--调用自定义函数得到结果:
_select distinct name ,work ,remark ,dbo.f_hb(name ,work ,remark) as time from tb
/*
name work remark time
---------- ---------- -------------------- ------------------
李四 项目经理 有前途 5,7-10
王五 技术总监 真棒 10
张三 程序员 小伙子不错 1-3,2,3
分享到:
相关推荐
压缩包子文件“db2_sql列转行.txt”可能包含了关于如何在IBM DB2数据库中使用SQL来实现列转行的具体示例或者脚本。DB2是一个企业级的关系型数据库管理系统,它同样支持类似SQL Server的`STRING_AGG`函数来完成列转行...
本资料集——"【大数据必备】非科班转行Java大数据面经分享.zip"——似乎是一个专为非计算机专业背景的人士准备的Java大数据学习资源,帮助他们顺利转行并应对面试。下面,我们将深入探讨Java大数据的关键知识点。 ...
嵌入式八股文面试题库资料知识宝典-华为的面试试题.zip
训练导控系统设计.pdf
嵌入式八股文面试题库资料知识宝典-网络编程.zip
人脸转正GAN模型的高效压缩.pdf
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
少儿编程scratch项目源代码文件案例素材-鸡蛋.zip
嵌入式系统_USB设备枚举与HID通信_CH559单片机USB主机键盘鼠标复合设备控制_基于CH559单片机的USB主机模式设备枚举与键盘鼠标数据收发系统支持复合设备识别与HID
嵌入式八股文面试题库资料知识宝典-linux常见面试题.zip
面向智慧工地的压力机在线数据的预警应用开发.pdf
基于Unity3D的鱼类运动行为可视化研究.pdf
少儿编程scratch项目源代码文件案例素材-霍格沃茨魔法学校.zip
少儿编程scratch项目源代码文件案例素材-金币冲刺.zip
内容概要:本文深入探讨了HarmonyOS编译构建子系统的作用及其技术细节。作为鸿蒙操作系统背后的关键技术之一,编译构建子系统通过GN和Ninja工具实现了高效的源代码到机器代码的转换,确保了系统的稳定性和性能优化。该系统不仅支持多系统版本构建、芯片厂商定制,还具备强大的调试与维护能力。其高效编译速度、灵活性和可扩展性使其在华为设备和其他智能终端中发挥了重要作用。文章还比较了HarmonyOS编译构建子系统与安卓和iOS编译系统的异同,并展望了其未来的发展趋势和技术演进方向。; 适合人群:对操作系统底层技术感兴趣的开发者、工程师和技术爱好者。; 使用场景及目标:①了解HarmonyOS编译构建子系统的基本概念和工作原理;②掌握其在不同设备上的应用和优化策略;③对比HarmonyOS与安卓、iOS编译系统的差异;④探索其未来发展方向和技术演进路径。; 其他说明:本文详细介绍了HarmonyOS编译构建子系统的架构设计、核心功能和实际应用案例,强调了其在万物互联时代的重要性和潜力。阅读时建议重点关注编译构建子系统的独特优势及其对鸿蒙生态系统的深远影响。
嵌入式八股文面试题库资料知识宝典-奇虎360 2015校园招聘C++研发工程师笔试题.zip
嵌入式八股文面试题库资料知识宝典-腾讯2014校园招聘C语言笔试题(附答案).zip
双种群变异策略改进RWCE算法优化换热网络.pdf
内容概要:本文详细介绍了基于瞬时无功功率理论的三电平有源电力滤波器(APF)仿真研究。主要内容涵盖并联型APF的工作原理、三相三电平NPC结构、谐波检测方法(ipiq)、双闭环控制策略(电压外环+电流内环PI控制)以及SVPWM矢量调制技术。仿真结果显示,在APF投入前后,电网电流THD从21.9%降至3.77%,显著提高了电能质量。 适用人群:从事电力系统研究、电力电子技术开发的专业人士,尤其是对有源电力滤波器及其仿真感兴趣的工程师和技术人员。 使用场景及目标:适用于需要解决电力系统中谐波污染和无功补偿问题的研究项目。目标是通过仿真验证APF的有效性和可行性,优化电力系统的电能质量。 其他说明:文中提到的仿真模型涉及多个关键模块,如三相交流电压模块、非线性负载、信号采集模块、LC滤波器模块等,这些模块的设计和协同工作对于实现良好的谐波抑制和无功补偿至关重要。