如图,这个表是一个select出来的结果,这里暂且重命名为表t
bdname有“客商辅助核算” (对应的是客商),“工程项目”(对应的是工程项目)
bdname为工程项目的有多个一样的名字“中国农业科学院附属小学抗震改造建设工程”,
我现在要条件valuecode='0102461101'(注意valuecode同时针对客商和项目)这个的时候,找出他们对应下面的两个bdname为客商辅助的客商(绿色剪头,这两个客商为这个项目提供材料)
说明1:这个项目和为其提供材料的客商对应同一个pk_voucher。
说明2:查询结果很多的项目和客商我本来的是这样写的
  select * from t where bdname='客商辅助核算' --筛选出客商
  and pk_voucher in
(select pk_voucher from t where valuecode='0102461101')--子查询为同一个pk_voucher
可是报错说下面的t找不到。(with t as没有问题,公司不让用with t as)
请教高手,怎么写
最终的查询结果应该是这样的

解决方案 »

  1.   

    with tb_data as (select '1038N51000000000GYU6' pk_voucher, '工程项目' bdname, '0102371114' valuecode, '永定河孔雀城佳和园工程' valuename from dual union all
    select '1038N51000000000GYU6' pk_voucher, '客商辅助核算' bdname,'010201' valuecode,'江苏建工北京分公司' valuename from dual union all
    select '1038N51000000000GYQP' pk_voucher, '工程项目' bdname, '0102461101' valuecode, '中国农业科学院附属小学抗震改造建设' valuename from dual union all
    select '1038N51000000000GYQP' pk_voucher, '客商辅助核算' bdname,'01001005095' valuecode,'北京川太和贸易有限公司' valuename from dual union all
    select '1038N51000000000GYQW' pk_voucher, '工程项目' bdname, '0102461101' valuecode, '中国农业科学院附属小学抗震改造建设' valuename from dual union all
    select '1038N51000000000GYQW' pk_voucher, '客商辅助核算' bdname,'17051905014' valuecode,'溧阳市棣头旭辉不锈钢制作服务部' valuename from dual union all
    select '1038N51000000000GYR3' pk_voucher, '工程项目' bdname, '0102461101' valuecode, '中国农业科学院附属小学抗震改造建设' valuename from dual union all
    select '1038N51000000000GYR3' pk_voucher, '客商辅助核算' bdname,'01001009030' valuecode,'创展时代(北京)科技有限公司' valuename from dual)
    select t1.valuecode vp, t1.valuename vn, t2.valuecode valuecode, t2.valuename valuename, t2.bdname bdname
     from (select * from tb_data where bdname = '工程项目') t1 inner join (select * from tb_data where bdname = '客商辅助核算') t2 on t1.pk_voucher = t2.pk_voucher;
      

  2.   

    其实写之前想说不要用这个inter join,因为代码会很长。
    不过我最后也没有找到第二个更好的办法
      

  3.   

    select t1.valuecode vp, t1.valuename vn, t2.valuecode valuecode, t2.valuename valuename, t2.bdname bdname
     from (select * from tb_data where bdname = '工程项目') t1 inner join (select * from tb_data where bdname = '客商辅助核算') t2 on t1.pk_voucher = t2.pk_voucher;请问代码哪里长?
      

  4.   

    这样查出来是什么.select * 
    from t 
    where bdname='客商辅助核算' 
          and valuecode='0102461101'