全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
分列实现技术工作中有时会遇到表中列按照某个分割符将不同属性值串连在一起,为了重新组织数据,要求将该值按属性值分列存储,因此需要采取一定的技术手段,对原列进行分割,下面以一个实例详细讲述分列实现的技术要点。一、数据准备首先用以下代码创建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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国调理食品行业深度调研及投资前景预测研究报告
- 单体大棚建设方案
- 问题肌厂家运营方案
- 芳烃氧化平台建设方案
- 2025江西萍乡市人才发展集团有限公司第二批次招聘和考察人员及笔试历年参考题库附带答案详解
- 2025江西吉安永丰县人文殡葬服务有限公司面向社会招聘2人笔试历年参考题库附带答案详解
- 2025江苏省港口集团有限公司总部部门副职招聘2人笔试历年参考题库附带答案详解
- 2025新疆白沙湖旅游发展有限公司招聘2人笔试历年参考题库附带答案详解
- 2025广西梧州市长洲区荣汇产业投资集团有限公司员工内部竞聘上岗拟聘用笔试历年参考题库附带答案详解
- 2025广东省汕尾市建城投资有限公司招聘7人笔试历年参考题库附带答案详解
- 成都未来科技城发展服务局2026年社会招聘笔试题库有答案详解
- 2026年机关事业单位考调、选调工作人员考试(综合知识、综合应用能力测试)模拟试题及解析(甘孜州)
- 2026年中国石油辽阳石化分公司校园招聘笔试参考试题及答案解析
- 雨课堂学堂在线学堂云《内科学(白城医学高等专科学校)》单元测试考核答案
- 2026年新水利安全员b证考试试题及答案
- 2026年舞台展台搭建安全责任书
- 二年级上册数学【应用题乘法】80题(含答案)
- 2026年全国中考语文试题汇编-议论文阅读及答案
- 26年云南会计专升本试题及答案
- 冷库管理制度及流程规范
- 书稿排版格式
评论
0/150
提交评论