原数据FID   FName   FTotal
1     AAA     null
2     BBB     分支机构---12---重庆中心|| 部门---50.01---网络
3     CCC     网点---99.0013---重庆中心求一查询语句,得出下面内容
FID  FName    FType     FDetailID    FDetailName
1    AAA      
2    BBB      分支机构  12           重庆中心        
2    BBB      部门      50.01        网络 
3    CCC      网点      99.0013      重庆中心
后三列都是字符串。
谢谢。

解决方案 »

  1.   

    SQL 2005是不是有简单的方法
      

  2.   


    --分拆列值
    --原著:邹建
    --改编:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)  2007-12-16  广东深圳/*
    有表tb, 如下: 
    id          value 
    ----------- ----------- 
    1          aa,bb 
    2          aaa,bbb,ccc 
    */
    --欲按id,分拆value列, 分拆后结果如下: 
    /*
    id          value 
    ----------- -------- 
    1          aa 
    1          bb 
    2          aaa 
    2          bbb 
    2          ccc 
    */
    --1. 旧的解决方法(sql server 2000) 
    select top 8000 id = identity(int, 1, 1) into # from syscolumns a, syscolumns b select A.id, substring(A.[values], B.id, charindex(',', A.[values] + ',', B.id) - B.id) 
    from tb A, # B 
    where substring(',' + A.[values], B.id, 1) = ',' drop table # --2. 新的解决方法(sql server 2005) create table tb(id int,value varchar(30)) 
    insert into tb values(1,'aa,bb') 
    insert into tb values(2,'aaa,bbb,ccc') 
    go 
    select A.id, B.value 
    from( 
        select id, [value] = convert(xml,' <root> <v>' + replace([value], ',', ' </v> <v>') + ' </v> </root>') from tb 
    )A 
    outer apply( 
        select value = N.v.value('.', 'varchar(100)') from A.[value].nodes('/root/v') N(v) 
    )B drop table tb /* 
    id          value 
    ----------- ------------------------------ 
    1          aa 
    1          bb 
    2          aaa 
    2          bbb 
    2          ccc (5 行受影响) 
    */
      

  3.   


    declare @table table (FID int,FName varchar(3),FTotal varchar(50))
    insert into @table
    select 1,'AAA',null union all
    select 2,'BBB','分支机构---12---重庆中心||部门---50.01---网络' union all
    select 3,'CCC','网点---99.0013---重庆中心'select A.FID,A.FName, B.FTotal
    from( 
        select FID, FName,
     FTotal = convert(xml,' <root> <v>' + replace(FTotal, '||', ' </v> <v>') + ' </v> </root>') from @table 
    )A 
    outer apply( 
        select FTotal = N.v.value('.', 'varchar(100)') from A.FTotal.nodes('/root/v') N(v) 
    )B 
    /*
    FID         FName FTotal
    ----------- ----- --------------------------
    1           AAA   NULL
    2           BBB   分支机构---12---重庆中心 
    2           BBB   部门---50.01---网络 
    3           CCC   网点---99.0013---重庆中心 
    */
      

  4.   

    FID         FName FTotal
    ----------- ----- --------------------------
    1           AAA   NULL
    2           BBB   分支机构---12---重庆中心 
    2           BBB   部门---50.01---网络 
    3           CCC   网点---99.0013---重庆中心 
    */得到这结果也行了,后面的我自己处理即可。两种方法那种效率高,现在客户是使用2005,但我想做的通用一点,2000的会很慢吗