从一个表中取出记录,同时加一列,这一列的数据来源语另外一个表
意思是取表etsnsr中对应的每组(yh_zh,nsrnbm)在NSRYHZH表中取出 按xy_bj,xy_sj排序后的第一条记录对应的YX_QSRQ 。
有语法错误,该怎么改?     
  select t.yh_zh,
         (select YX_QSRQ
            from (select row_number() over(order by xy_bj desc ,xy_sj desc) as rn,
                         YX_QSRQ
                    from  NSRYHZH
                   where yh_zh = t.yh_zh
                     and nsrnbm = t.nsrnbm)   
           where rn = 1),
          t.nsrnbm   
    from etsnsr  t 
   -- 执行提示:ORA-00904: "T"."NSRNBM": invalid identifier
但是下面的语句又可以,难道是select嵌套层次太多  
  select t.yh_zh,
         (select YX_QSRQ
            from NSRYHZH
                   where yh_zh = t.yh_zh
                     and nsrnbm = t.nsrnbm and rownum=1 
                     /* order by xy_bj desc ,xy_sj desc 因为rownum=1所以order by 将不期作用*/)   
           where rn = 1),
          t.nsrnbm   
    from etsnsr  t

解决方案 »

  1.   

    里面的select找不到最外层的表etsnsr  t 
    改:
    select t.yh_zh,
           (select YX_QSRQ
              from (select row_number() over(order by xy_bj desc ,xy_sj desc) as rn,
                           YX_QSRQ
                      from  NSRYHZH,etsnsr  t
                     where NSRYHZH.yh_zh = t.yh_zh
                       and NSRYHZH.nsrnbm = t.nsrnbm)   
             where rn = 1),
            t.nsrnbm   
      from etsnsr  t;
      

  2.   

    79bo(山芋) 多谢了,你的语句功能上没有意义,这样选择出来的 YX_QSRQ 对每个记录都市一样的
      

  3.   

    select t.yh_zh,
             (select YX_QSRQ
                from (select row_number() over(order by xy_bj desc) as rn,
                             a.YX_QSRQ
                        from   T_DJ_NSRYHZH  a,T_DJ_ETSNSR_YF  tt 
                       where a.yh_zh = tt.yh_zh
                         and a.nsrnbm = tt.nsrnbm)   
               where rn = 1),
              t.nsrnbm   
        from T_DJ_ETSNSR_YF  t 试试这个怎么样 能不能执行
      

  4.   

    select t.yh_zh,n.YX_QSRQ,t.nsrnbm
                from etsnsr t,
                     (select row_number() over(order by n.xy_bj desc ,n.xy_sj desc) as rn,
                             n.*
                        from NSRYHZH n
                     )zz
               where rn = 1
                 and t.yh_zh = zz.yh_zh
                 and t.nsrnbm = zz.nsrnbm;