首页 > 代码库 > 单列多值数据转化成多行在SQLSERVER中的实现
单列多值数据转化成多行在SQLSERVER中的实现
前两天看到一篇博文讲如何在ORACLE中将一行含有单列多值的数据转换成多行单列,具体问题如下。
ID NUMBER
1 137xxxx,138xxxx
取出来成
ID NUMBER
1 137xxxx
1 138xxxx
原文给出的解法可参见http://www.cnblogs.com/myjoan/p/4139348.html, 另外回复里貌似给了更简洁的写法。
因为好几年没碰ORACLE了,最近几年都是用微软的SQL SEVER,所以就想如果是SQL SERVER,应该怎么解决这个问题?我所能想到的是用递归的方式来解决,于是用了CTE表。
代码如下
WITH test AS (SELECT 1 ID ,‘13811111111,13311111111,13900000000‘ phone --FROM dualUNION ALLSELECT 2,‘15811111111,15911111111,18800000000‘ --FROM dual), cte as(select ID,phone,SUBSTRING(phone,1,LEN(phone)- CHARINDEX(‘,‘,REVERSE(phone))) leftphone ,SUBSTRING(phone,LEN(phone)- CHARINDEX(‘,‘,REVERSE(phone))+2,CHARINDEX(‘,‘,REVERSE(phone))) newphonefrom testunion allselect ID,leftphone,SUBSTRING(leftphone,1,LEN(leftphone)- CHARINDEX(‘,‘,REVERSE(leftphone))) leftphone ,SUBSTRING(leftphone,LEN(leftphone)- CHARINDEX(‘,‘,REVERSE(leftphone))+2,CHARINDEX(‘,‘,REVERSE(leftphone))) newphonefrom ctewhere newphone<>‘‘)select ID, case when newphone=‘‘ then leftphone else newphone end as phonefrom cteorder by 1
不知是否还有其它方法解决这个问题?还请分享共勉,谢谢!
单列多值数据转化成多行在SQLSERVER中的实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。