比这个还长的sql语句我都写过,只不过我在其中有些环节用自编的函数来实现的,你不妨想想其他方法。因为你的语句实在太多,又不明白你到底要实现什么功能,给你分开也是瞎分。不能解决问题

解决方案 »

  1.   

    建议你做如下修改:
    1。将
    DECODE(K.HBSVIRUS, '+', (SELECT NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '01') ) || DECODE(K.HBEVIRUS, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '02') ) || DECODE(K.HCVIRUS, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '03') ) || DECODE(K.MRSAVIRUS, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '04') ) || DECODE(K.WARVIRUS, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '05') ) || DECODE(K.TPHAVIRUS, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '06') ) || DECODE(K.HIVVIRUS, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '07') ) || DECODE(K.ATLAVIRUS, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '08') ) || DECODE(K.PYOVIRUS, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '09') ) || DECODE(K.TBVIRUS, '+', (SELECT ',' ||NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '10') ) || DECODE(K.CHILDINFECTION, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '11') ) || DECODE(K.INFECTION1, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '12') ) || DECODE(K.INFECTION2, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '13') ) || DECODE(K.INFECTION3, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '14') ) || DECODE(K.INFECTION4, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '15') ) || DECODE(K.INFECTION5, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '16') ) || DECODE(K.INFECTION6, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '17') ) || DECODE(K.INFECTION7, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '18') ) || DECODE(K.INFECTION8, '+',(SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '19') ) || DECODE(K.INFECTION9, '+', (SELECT ',' || NAME FROM COMCONST WHERE TABLEKIND = 'C13Infection' AND CODE = '20') ) NAME 
    部分做成一个单独的函数,用于生成NAME。2.将主语句from后边作为表名出现的(select ..from ..)语句独立出来,建立view,然后直接引用view名作为表名。3.书写select语句时要有层次,复杂的语句每个字段名作为一行,select 、from、where要单独突出,子语句要缩格,这样方便阅读。