问题前提:
 ID为主键表: 
  ID(CHAR 4), CD1(CHAR 1000),CD2(CHAR 1000),CD3(CHAR 1000),CD4(CHAR 1000),CD5(CHAR 1000),CD6(CHAR 1000),CD7(CHAR 1000),CD8(CHAR 1000),CD9(CHAR 1000),CD10(CHAR 1000)  1:表的CD1到CD10里面,原则是先从CD1开始有值,如果CD1值没填满的话,那后面的项目肯定都没有值,如果CD1的1000位满的话,CD2又没值的话,那CD2跟后面的项目里面也都没有值.  2:在有值的CD项目中,每一个项目里面又以4个字节为一个整体的长文字列,这4个字节还可能会重复出现.想要查出的内容:
  以ID为主键的,有值项目间跟项目内的4个字节不重复的文字列.

解决方案 »

  1.   

    请各位高手帮帮小弟解决一下这个问题呢,限于用ORACLE来思考.
      

  2.   

    >这个重复数据规则如何的?有分隔符?还是什么都没有就4字节为一组...
    没有分隔符,
    举个例子:
     ID     CD1                CD2.....
     1234   abcdefghhjieabcd   NULL如果我用1234来查询的话,要得到的文字列是abcdefghhjie 
    消除了一个重复的4字节的abcd
      

  3.   

    恐怕要写函数或procedure了。
    for循环查找每4个字节是否在后面的字符串中出现,并且出现的位置mod(position,4)=1
      

  4.   

    我现在在尝试用两层VIEW的方法
      

  5.   

    我有一个思路:
    1.先定义一个临时表,如:
    create global temporary table t_temp(cd varchar(4);)2.可以先定义一个变量,初始值为1,然后从1遍历CD到的长度,如下:
    for i in 1..length(CD)
    loop
     //每四位截取,插入到 临时表
     insert into t_temp select substr(CD,i,i+3) from table_name;
    end loop;
    3.从临时表中过滤掉重复的数据进行操作
    以上你可以封装一个函数或者存贮过程多次调用
      

  6.   

    你可以试试这个。根据自己情况再改进下吧
    SQL>  select * from test11;
     
     ID CD1                                                                              CD2
    --- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
      1 1234asdf5678                                                                     QWERasdfPOIU
      2 QWERasdfPOIU                                                                     1234asdf5678
     
    SQL> 
    SQL> SELECT ID,replace(wm_concat(chr),',','')  FROM
      2  (
      3  SELECT ID,MIN(colnum),MIN(rn),chr   FROM
      4  (SELECT ID,1 colnum ,rn, substr(cd1,rn*4-3,4) chr FROM test11 a,(SELECT ROWNUM rn FROM dual CONNECT BY ROWNUM<=250 )b
      5  UNION ALL
      6  SELECT ID,2 colnum ,rn, substr(cd2,rn*4-3,4) chr FROM test11 a,(SELECT ROWNUM rn FROM dual CONNECT BY ROWNUM<=250 )b )
      7  GROUP BY ID ,chr
      8  ORDER BY ID,MIN(colnum),MIN(rn)
      9  ) WHERE chr<>'1234'
     10  GROUP BY ID;
     
     ID REPLACE(WM_CONCAT(CHR),',','')
    --- --------------------------------------------------------------------------------
      1 asdf5678QWERPOIU
      2 QWERasdfPOIU5678
     
    SQL> 
      

  7.   

    你的问题关键就是如何去掉重复的四个相连的字符,用下面的这个函数:create or replace function str_f(p_str varchar2) return varchar2 is
      v_length number := length(p_str);
      v_result varchar2(1000) := '';
      i        number := 1;
    begin
      if v_length = 4 then
        v_result := p_str;
      else
        while i <= v_length - 4 loop
          if nvl(instr(v_result, substr(p_str, i, 4), 1), 0) = 0 then
            v_result := v_result || substr(p_str, i, 4);
          end if;
          i := i + 4;
        end loop;
      end if;
      return v_result;end;
    测试:select str_f('abcdefghhjieabcd') from dual;  --abcdefghhjie