码迷,mamicode.com
首页 > 数据库 > 详细

单列多值数据转化成多行在SQLSERVER中的实现

时间:2014-12-08 17:16:52      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   sp   on   数据   

前两天看到一篇博文讲如何在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 dual
UNION ALL
SELECT 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))) newphone
from test
union all
select  ID,leftphone,SUBSTRING(leftphone,1,LEN(leftphone)- CHARINDEX(,,REVERSE(leftphone))) leftphone
    ,SUBSTRING(leftphone,LEN(leftphone)- CHARINDEX(,,REVERSE(leftphone))+2,CHARINDEX(,,REVERSE(leftphone))) newphone
from cte
where newphone<>‘‘
)

select ID, case when newphone=‘‘ then leftphone else newphone end as phone
from cte
order by 1

不知是否还有其它方法解决这个问题?还请分享共勉,谢谢!

单列多值数据转化成多行在SQLSERVER中的实现

标签:style   blog   http   io   ar   color   sp   on   数据   

原文地址:http://www.cnblogs.com/hopecho/p/4151203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!