表1:
id    姓名      成绩
1     张三      90
2     李四      80
.
.
.
 
表2:(其中姓名是2个数据拼接而成的,中间用逗号分隔)
id    姓名      年龄
1     张三,男  20
2     李四,女  30
.
.
.如何做一个视图,把每个人的年龄和成绩显示出来。

解决方案 »

  1.   

    需要自己写个split函数,然后就简单了
      

  2.   

    搜一下,很多的,我这有个oracle用的
    create or replace FUNCTION splitstr
        (
          p_string    IN VARCHAR2,
          p_delimiter IN VARCHAR2,
          p_num       IN NUMBER)
        RETURN VARCHAR2
      AS
        v_length NUMBER := LENGTH(p_string);
        v_start  NUMBER := 1;
        v_index  NUMBER;
        v_p      NUMBER := 1;
        v_r      VARCHAR2(100);
      BEGIN
        WHILE(v_start <= v_length)
        LOOP
          v_index   := INSTR(p_string, p_delimiter, v_start);
          IF v_index = 0 THEN
            v_r     := (SUBSTR(p_string, v_start));
            v_start := v_length + 1;
          ELSE
            v_r     := (SUBSTR(p_string, v_start, v_index - v_start));
            v_start := v_index                            + 1;
          END IF;
          v_p   := v_p  + 1;
          IF v_p = p_num+1 THEN
            RETURN v_r;
          END IF;
        END LOOP;
        RETURN '';
      END splitstr;
      

  3.   

    SELECT
      表1.姓名,
      表1.成绩,
      表2.年龄
    FROM 
      表1
    INNER JOIN 表2 ON 表1.id=表2.id
      

  4.   

    http://www.cnblogs.com/zc_0101/archive/2009/06/30/1513776.html
    自己看吧,修改一下应该就能用的
      

  5.   


    select a.姓名,b.年龄,a.成绩
    from 表1  a 
    inner join (
    select left(姓名,CHARINDEX(',',姓名)-1) as 姓名,年龄
    from 表2
    ) b on a.姓名=b.姓名姓名   年龄          成绩
    ---- ----------- -----------
    李四   30          80
    张三   20          90(2 行受影响)
      

  6.   

    SELECT 表1.姓名+','+表2.年龄,表1.成绩,FROM 表1
    INNER JOIN 表2 ON 表1.姓名=表2.substring(姓名,0,len(姓名)-1)