zoukankan      html  css  js  c++  java
  • 单列多值数据转化成多行在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 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

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

  • 相关阅读:
    8.8总结
    8.4总结
    8.3总结
    题目分享H 二代目
    题目分享G 二代目
    题目分享E 二代目
    题目分享F 二代目
    题目分享D 二代目
    题目分享C 二代目
    题目分享Y
  • 原文地址:https://www.cnblogs.com/hopecho/p/4151203.html
Copyright © 2011-2022 走看看