请教一条语句
table tb1 ,
Name , code
A        X-Y
B        U-V-W
C        L想得到结果A, X
A, Y
B, U
B, V
B, W
Z, L请问如何用一条SQL语句实现?

解决方案 »

  1.   

    select name,v
    from tb1 a,(
     SELECT chr(64+ROWNUM) v FROM All_Objects WHERE ROWNUM <=26
     )b 
    where b.v between substr(a.code,1,1) and substr(a.code,-1)
      

  2.   

    强!
    但是 code 的值有时候是这样的‘32-17&-61-CB’

    不过提供了思路,谢谢!我再另外构建B表
      

  3.   

    我的目的是:将 字段拆分成n个节点,用多列的方式显示出来。
     ----------脚本
     drop table t1;                                             
     
     create table t1(
     NAME varchar2(10),
     PATH varchar2(200)
     );
     
     Insert Into T1(NAME,PATH) values('A', 'X2-Y3');
     Insert Into T1(NAME,PATH) values('B', 'U&-V-W-V');
     Insert Into T1(NAME,PATH) values('C', 'M4'); 
     
     commit;
      
                
    创建一个视图 V1 ,期望结果 select * from V1 如下:
     
    Name   NO    Node
    ------  -------- 
       A      1     X2 
       A      2     Y3                
       B      1     U&                
       B      2     V                
       B      3     W 
       B      4     V                
       Z      1     M4
       
    问题:这个视图怎么写?
      

  4.   

    yaozw_mountain(山林)  再帮忙看看啊
      

  5.   

    原来我意思看错了,是字符串切割问题
    第一种方法,使用自定义表函数,实现类似:
    select t.*, c.c from t, table(f_sep(t.a))c
    这种比较通用方法二:字符串切割
    select a.*, r, 
    substr(code, Instr('-'||code||'-','-', 1, r ), 
    Instr('-'||code||'-','-', 1, r +1 ) - Instr('-'||code||'-','-', 1, r ) -1 )v
    from tb1 a,( 
      SELECT ROWNUM r FROM All_Objects WHERE ROWNUM <=30     --取最大可能数
      )b
    WHERE Instr('-'||code||'-', '-', 1, r +1 )>0