全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
分列实现技术工作中有时会遇到表中列按照某个分割符将不同属性值串连在一起,为了重新组织数据,要求将该值按属性值分列存储,因此需要采取一定的技术手段,对原列进行分割,下面以一个实例详细讲述分列实现的技术要点。一、数据准备首先用以下代码创建tp表:use tempdb;goif object_id(dbo.tp,u) is not null drop table tp;create table dbo.tp( t_id int primary key, t_val varchar(max);goinsert into tp values (1,许建宏,1,20030722本人,001101343), (2,梅春兰,2,19650409户主,001101634), (3,管玲芳,2,19470908户主,001101651), (4,蒋降,2,19840927户主,001101653), (5,周连香,2,19450715户主,001101660), (6,徐爱英,2,19551125户主,001101666), (7,倪兵,1,19730218户主,001101671);Tp表t_val列,将姓名、性别、出生日期、身份证号、与户主关系及户号以逗号分割并串连在一起,要求将该列按各个属性值单独列示。二、实现步骤1、首先创建一张辅助数字表,仅包含一列整型数值(120),代码如下:if OBJECT_ID(dbo.num,u) is not null drop table dbo.num;create table dbo.num(val int primary key);go with ias(select 1 n union all select n+1 from i where n100 ) insert into dbo.num select * from i; 利用递归技术快速向num表插入1100个数值,如果要插入更多的数值,需要指定option选项,默认查询最大深度为100。2、查找每个逗号在列中的位置(注意:如果t_val列是unicode符,需要要除以2)select t.t_id , t.t_val , n.val from tp t join num n on n.val=datalength(t.t_val) and SUBSTRING(t.t_val,n.val,1)=,;结果如下:上述val列标明了每个逗号所在的位置,t_val列应拆分为6列,结果中只生成了5行,可在t_val列值前添加一个逗号,每个t_id将生成6行数据:在t_val值前加上逗号后,结果集中的val列确定了非逗号的起始位置,即需要提取位置的起点,利用类似的方法,将t_val值后面加上逗号,利用差值计算出两分割逗号之间需提取字符的数量,示例代码如下: select t.t_id , t.t_val , n.val , substring(t_val,val,charindex(,t_val+,val)-val) col from tp t join num n on n.val=datalength(t.t_val)+1and SUBSTRING(,+t.t_val,n.val,1)=,;结果如下:综上1、2所述,中间代码如下: select t.t_id , t.t_val , n.val , ROW_NUMBER() over(partition by t_id order by n.val) sq , substring(t_val,val,charindex(,t_val+,val)-val) col from tp t join num n on n.val=datalength(t.t_val)+1and SUBSTRING(,+t.t_val,n.val,1)=,;结果如下图所示:上述结果正确地从t_val列中提取了分割的值,sq列按统一的行号指明了分割的顺序,将上述结果生成CTE,再对此进行行转列:with c as ( select t.t_id , t.t_val , n.val , ROW_NUMBER() over(partition by t_id order by n.val) sq , substring(t_val,val,charindex(,t_val+,val)-val) col from tp t join num n on n.val=datalength(t.t_val)+1 and SUBSTRING(,+t.t_val,n.val,1)=, ) select t_id , t_val , MAX(case sq when 1 then col end) as 姓名 , MAX(case sq when 2 then cast(col AS int) end) as 性别 , max(case sq when 3 then CAST(col as varchar(8) end) as 出生日期 , MAX(case sq when 4 then cast(col as char(18) end) as 身份证号 , MAX(case sq when 5 then col end) as 与户主关系 , MAX(case sq when 6 then cast(col as char(9) end) as 户编号 from c group by t_id,t_val;最终结果如下:三、其他方法Excel 2007及以上版本中提供
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《建筑中的结构作业设计方案-2023-2024学年科学人教鄂教版》
- 《照相机和眼睛作业设计方案-2023-2024学年科学青岛版2001》
- 《认识光作业设计方案-2023-2024学年科学青岛版》
- 《脑的保健导学案-2023-2024学年科学大象版》
- 粘胶长丝经济效益和社会效益分析报告
- 箱包产业链分析报告
- 小学三年级的演讲稿
- 强化预案编修和演练预案
- 农村小学新冠疫情演练预案
- 九年级中考励志精彩演讲稿范文(6篇)
- JJF 1610-2017电动、气动扭矩扳子校准规范(高清版)
- 离婚协议书下载
- 喷气织机常见织疵的成因及解决措施
- 厚朴排气合剂联合莫沙必利治疗功能性便秘的临床疗效观察
- 设施农业用地备案申报材料(全套表格)
- 最新中国社区卫生协会培训基地管理办法(修订版)
- 《电机学》完整PPT课件(全套)
- 部编版二年级语文下册第五单元教学计划
- 种子加工项目商业计划书写作范文
- 《拆装圆珠笔》教学反思(精选3篇)
- 冰蓄冷中央空调系统的运行管理与能耗分析
评论
0/150
提交评论