这是天书吗??
----------------------------------------------------------
Select bb.编号,
       bb.姓名,
       bb.住院号,
       To_Char(cc.入院时间, 'yyyy-MM-dd HH24:mi'),
       To_Char(dd.化验时间, 'yyyy-MM-dd HH24:mi') 化验时间,
       aa.ALT,
       aa.AST,
       aa.GGT,
       aa.ALP,
       aa.ALB,
       aa.TB,
       aa.DB
  From (Select a.病人ID,
               Max(a.ALT) ALT,
               Max(a.AST) AST,
               Max(a.GGT) GGT,
               Max(a.ALP) ALP,
               Max(a.ALB) ALB,
               Max(a.TB) TB,
               Max(a.DB) DB
          From (Select 病人ID,
                       住院ID,
                       内容 As ALT,
                       Null As AST,
                       Null As GGT,
                       Null As ALP,
                       Null As ALB,
                       Null As TB,
                       Null As DB
                  From IHL_病人_化验检查
                 Where 父项 = '肝功'
                   And 项目 = '谷丙转氨酶'
                Union All
                Select 病人ID,
                       住院ID,
                       Null As ALT,
                       内容 As AST,
                       Null As GGT,
                       Null As ALP,
                       Null As ALB,
                       Null As TB,
                       Null As DB
                  From IHL_病人_化验检查
                 Where 父项 = '肝功'
                   And 项目 = '谷草转氨酶'
                Union All
                Select 病人ID,
                       住院ID,
                       Null As ALT,
                       Null As AST,
                       内容 As GGT,
                       Null As ALP,
                       Null As ALB,
                       Null As TB,
                       Null As DB
                  From IHL_病人_化验检查
                 Where 父项 = '肝功'
                   And 项目 = '谷氨酰转肽酶'
                Union All
                Select 病人ID,
                       住院ID,
                       Null As ALT,
                       Null As AST,
                       Null As GGT,
                       内容 As ALP,
                       Null As ALB,
                       Null As TB,
                       Null As DB
                  From IHL_病人_化验检查
                 Where 父项 = '肝功'
                   And 项目 = '碱性磷酸酶'
                Union All
                Select 病人ID,
                       住院ID,
                       Null As ALT,
                       Null As AST,
                       Null As GGT,
                       Null As ALP,
                       内容 As ALB,
                       Null As TB,
                       Null As DB
                  From IHL_病人_化验检查
                 Where 父项 = '肝功'
                   And 项目 = '白蛋白'
                Union All
                Select 病人ID,
                       住院ID,
                       Null As ALT,
                       Null As AST,
                       Null As GGT,
                       Null As ALP,
                       Null As ALB,
                       内容 As TB,
                       Null As DB
                  From IHL_病人_化验检查
                 Where 父项 = '肝功'
                   And 项目 = '总胆红素'
                Union All
                Select 病人ID,
                       住院ID,
                       Null As ALT,
                       Null As AST,
                       Null As GGT,
                       Null As ALP,
                       Null As ALB,
                       Null As TB,
                       内容 As DB
                  From IHL_病人_化验检查
                 Where 父项 = '肝功'
                   And 项目 = '直接胆红素') a,
               (Select 病人ID, Min(住院ID) As 住院ID
                  From IHL_病人_化验检查
                 Group By 病人ID) b
         Where a.病人ID = b.病人ID
           And a.住院ID = b.住院ID
         Group by a.病人ID) aa,
       IHL_病人_基本信息 bb,
       IHL_病人_住院信息 cc,
       (Select 病人ID, Min(住院ID) As 住院ID, Min(时间) As 化验时间
          From IHL_病人_化验检查
         Group By 病人ID) dd
 Where aa.病人ID = bb.ID
   And bb.ID = cc.病人ID
   And cc.ID = dd.住院ID
 Order By bb.编号, cc.入院时间

解决方案 »

  1.   

    把中间的大量union all改为下面的试试:
    -----------------------------------------------
                        Select 病人ID,
                           住院ID,
                           decode(项目,'谷丙转氨酶','内容',null) As ALT,
                           ...........
                      From IHL_病人_化验检查
                     Where 父项 = '肝功'
                     and 项目 in ('谷丙转氨酶',....)
      

  2.   

    难道是UNION ALL的问题?不会吧
      

  3.   

    哦,这真是天书,涉及到大量的业务逻辑
    呵呵,看了就头晕
    把Oracle报给你的错误号(信息)贴出来,有的时候只看SQL很难看出问题来
      

  4.   

    ft, 这么长的sql语句。so powerful!!
      

  5.   

    try:
    ---------------------------------------------------------------------------
    select
        bb.编号,
        bb.姓名,
        bb.住院号,
        To_Char(cc.入院时间, 'yyyy-MM-dd HH24:mi'),
        To_Char(dd.化验时间, 'yyyy-MM-dd HH24:mi') 化验时间,
        aa.ALT,
        aa.AST,
        aa.GGT,
        aa.ALP,
        aa.ALB,
        aa.TB,
        aa.DB
    from
        (select 
             病人ID,
             住院ID,
             max(decode(项目,'谷丙转氨酶'  ,内容)) as ALT,
             max(decode(项目,'谷草转氨酶'  ,内容)) as GGT,
             max(decode(项目,'谷氨酰转肽酶',内容)) as GGT,
             max(decode(项目,'碱性磷酸酶'  ,内容)) as ALP,
             max(decode(项目,'白蛋白'      ,内容)) as ALB,
             max(decode(项目,'总胆红素'    ,内容)) as TB,
             max(decode(项目,'直接胆红素'  ,内容)) as DB
         From 
             IHL_病人_化验检查
         where
             父项 = '肝功'
         group by
             病人ID,住院ID) a 
         where 
             a.病人ID = b.病人ID
             and
             a.住院ID = b.住院ID) aa,
        IHL_病人_基本信息 bb,
        IHL_病人_住院信息 cc,
        (select 
             病人ID,
             Min(住院ID) As 住院ID,
             Min(时间)   As 化验时间  
         From 
             IHL_病人_化验检查
         Group By 病人ID) dd
    where
        aa.病人ID = bb.ID
        and 
        aa.病人ID = cc.病人ID 
        and
        aa.病人ID = dd.病人ID
        and
        aa.住院ID = dd.住院ID
      

  6.   

    楼上给出的SQL有误,试试这个:
    --------------------------------------------------------
    select
        bb.编号,
        bb.姓名,
        bb.住院号,
        To_Char(cc.入院时间, 'yyyy-MM-dd HH24:mi') as 入院时间,
        To_Char(dd.化验时间, 'yyyy-MM-dd HH24:mi') as 化验时间,
        aa.ALT,
        aa.AST,
        aa.GGT,
        aa.ALP,
        aa.ALB,
        aa.TB,
        aa.DB
    from
        (select 
             病人ID,
             住院ID,
             max(decode(项目,'谷丙转氨酶'  ,内容)) as ALT,
             max(decode(项目,'谷草转氨酶'  ,内容)) as GGT,
             max(decode(项目,'谷氨酰转肽酶',内容)) as GGT,
             max(decode(项目,'碱性磷酸酶'  ,内容)) as ALP,
             max(decode(项目,'白蛋白'      ,内容)) as ALB,
             max(decode(项目,'总胆红素'    ,内容)) as TB,
             max(decode(项目,'直接胆红素'  ,内容)) as DB
         From 
             IHL_病人_化验检查
         where
             父项 = '肝功'
         group by
             病人ID,住院ID) aa,
        IHL_病人_基本信息   bb,
        IHL_病人_住院信息   cc,
        (select 
             病人ID,
             Min(住院ID) As 住院ID,
             Min(时间)   As 化验时间  
         From 
             IHL_病人_化验检查
         Group By 病人ID)   dd
    where
        aa.病人ID = bb.ID
        and 
        aa.病人ID = cc.病人ID 
        and
        aa.病人ID = dd.病人ID
        and
        aa.住院ID = dd.住院ID