select * from (select c.姓名,f_Get_Age(c.出生日期) as 年龄,decode(c.性别,'1','男','2','女') as 性别,c.身份证号,e.问题名称,b.结束时间 as 出院日期,j.名称,a.结帐金额
  from 个人费用记录 a ,服务活动记录 b ,个人信息 c,收入科目 j,个人问题列表 e
  where a.个人id=b.个人id  
  
   and a.事件id=b.id
   
   and b.摘要='个人入院记录'
   and a.个人id=c.id
   and a.收入科目id=j.id
 and e.个人id =a.个人id
  and e.服务记录id=b.id
  and e.问题名称 like '%术%'
   and b.结束时间 between to_date('2015-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2018-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))pivot (sum(a.结帐金额)for 名称 in(select 收据费目 from 收入科目 ))为什么sum里面写“a.结账金额”不行,但是写“结账金额”就行,还有in后面这个语句总是提示表达式缺失,

解决方案 »

  1.   

    1.为什么sum里面写“a.结账金额”不行,但是写“结账金额”就行,  
    答:pivot统计的是内层表的结果集,a表是内层表的别名,pivot只能访问结帐金额这个字段。
    就好比:
    select
      from (select a.结帐金额 from 表名 a)
      where 
      
     where 条件只能使用内层结果集查询处理的结帐金额这个字段,无法使用a.任何字段。
     
    还有in后面这个语句总是提示表达式缺失,
    2.in 后面智能使用字段或变量,无法使用select结果集。这个是语法要求。