DIAGNOSIS_ARRAY  是字典表
01 临床诊断                 1
02 病理诊断          1
03 影像诊断                 1
04 合并症或并发症诊断 1
05 其它诊断                 1
06 主要手术诊断         2
07 其他手术诊断         2这是一张关联表                                                   这里关联字典表
010G111EH190396 372927197301110040 13327057 85.240 06
010G111EH190396 372927197301110040 13327057 85.240 06|07
010G111EH190393 110103195210280040 39698319 01.    06求一条sql语句 关联表关联字典表该怎么写?

解决方案 »

  1.   

    ---这是表之间的关系
    -- Create table
    create table DIAGNOSIS_ARRAY
    (
      diagnosistype VARCHAR2(2),
      diagnosisname VARCHAR2(20),
      type          VARCHAR2(2)
    )
    tablespace USERS
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64
        minextents 1
        maxextents unlimited
      );
    -- Add comments to the columns 
    comment on column DIAGNOSIS_ARRAY.diagnosistype
      is '诊断类型代码';
    comment on column DIAGNOSIS_ARRAY.diagnosisname
      is '诊断类型数组';
    comment on column DIAGNOSIS_ARRAY.type
      is '类型  1为西医诊断,2为手术诊断';-- Create table
    create table LP_OPERATIONCODE_ARRAY
    (
      bdh           VARCHAR2(20),
      pid           VARCHAR2(20),
      v_sjbh        VARCHAR2(10),
      operationcode VARCHAR2(10),
      diagnosistype VARCHAR2(10)
    )
    tablespace USERS
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64
        minextents 1
        maxextents unlimited
      );
      

  2.   

    俩表如何关系起来 对应字段是?type 和 diagnosistype 对应?
      

  3.   

    不好意思,回复晚了 DIAGNOSIS_ARRAY的 diagnosistype 对应 LP_OPERATIONCODE_ARRAY 的diagnosistype 
      

  4.   

    /*
    1、单行拆分为多行
      借用一楼之前加答过的关于拆分的代码,稍微做了些调整,不再写死最大ROWNUM,
      改为记录中允许的最大ROWNUM := NVL(LENGTH(regexp_replace(c2,'[^,]')),0)
    2、关联字典表
    3、关联后多行再次拼装为单行
      使用WM_CONCAT再次组装,然后GROUP BY ,其实DISTINCT也行。
      不论用哪个,查询效率就很低了
    */
    WITH t1 AS
      ( SELECT '张三' c1,'01,02,05' c2,DATE'2000-11-19' c3 FROM dual
      UNION ALL
      SELECT '李四','07',DATE'2001-01-04' FROM dual
      UNION ALL
      SELECT '王五','04,05',DATE'2001-01-08' FROM dual
      ),
      t2 as (
      select '01' as fcode, '临床诊断' as fname, 1 as ftype from dual
      union all
      select '02', '病理诊断', 1 from dual
      union all
      select '03', '影像诊断', 1 from dual
      union all
      select '04', '合并症或并发症诊断', 1 from dual
      union all
      select '05', '其它诊断', 1 from dual
      union all
      select '06', '主要手术诊断', 2 from dual
      union all
      select '07', '其他手术诊断', 2 from dual
      )
    select c1,c3,cc from (
    select c1,c3,wm_concat(fname) over(partition by c1,c3 order by c1,c3) cc from (
    select * from (
    SELECT c1,
        substr(','
      ||c2
      ||',',instr(','
      ||c2,',',1,b.rn) +1,   instr(c2
      ||',',',',1,b.rn)-instr(','
      ||c2,',',1,b.rn)) c2,
      c3
    FROM t1,
      (SELECT rownum rn
    FROM t1   connect BY rownum < NVL(LENGTH(regexp_replace(c2,'[^,]')),0)
      ) b
    WHERE LENGTH(c2)-LENGTH(REPLACE(c2,','))+1>=b.rn
    ORDER BY c1,
      b.rn) a ,t2
      where a.c2 = t2.fcode  
      )
    ) group by c1,c3,ccC1     C3                        CC                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
    ------ ------------------------- -----------------------
    李四   2001-01-04 00:00:00       其他手术诊断             
    王五   2001-01-08 00:00:00       其它诊断,合并症或并发症诊断
    张三   2000-11-19 00:00:00       其它诊断,病理诊断,临床诊断
      

  5.   

    如果是简单的连接,用下面的语句不就好了:
    select 要选取的字段 from DIAGNOSIS_ARRAY d,LP_OPERATIONCODE_ARRAY l where d.diagnosistype=l.diagnosistype;
      

  6.   

       用一个ORACLE 函数,o(︶︿︶)o 唉,我懂的东西太多了