请教一个问题:YPrk入库表和YPck出库表,我现在想查询出6月份商品的入库、出库、库存情况。
YPrk表记录如下:
   名称       规格      编码    入库日期       入库数量          
   尼龙线    T002红 Nlx 2012-07-08 20
   尼龙线    T001白色 002 2012-06-09 20
   袜丝线    T001黄色 001 2012-05-07 15Ypck表记录如下:
   名称       规格 编码 出货日期 出货数量
   尼龙线     T001白色 002 2012-07-07 10
   尼龙线     T002红 Nlx 2012-06-13 5我想得到6月份的结果应该是:
   名称       规格 编码 累计进货   6月进货   累计出货   6月出货   现库存
   尼龙线    T001白色 002 20         20      10          0          10
   尼龙线    T002红 Nlx 20    0         5           5          15
请问这样的语句应该怎么实现:我尝试用 Right Join   S1:=' (select 名称,规格,编码,sum(进货数量)as DqJh from YpRk where (Year(进货日期)=:Y1)and(Month(进货日期)=:M1) group by 名称,规格,编码) t1 ';
  S2:=' (select 名称,规格,编码,sum(出货数量)as DqCh from YpCk where (Year(出货日期)=:CkY1)and(Month(出货日期)=:CkM1) group by 名称,规格,编码) t2 ';
  S3:=' (select 名称,规格,编码,sum(进货数量)as LjJh  from YpRk group by 名称,规格,编码) t3 ';//累计进货
  S4:=' (select 名称,规格,编码,sum(出货数量)as LjCh  from Ypck group by 名称,规格,编码) t4 ';//累计出货
  S5:=' (select t3.*,t4.LjCh,(t3.LjJh-iif(t4.LjCh is null,0,t4.LjCh))as Ljkc from '+s3+
         ' left join '+s4+' on ((t3.编码=t4.编码)and(t3.规格=t4.规格))) t5 ';
 //s6=s5 Right Join s1--------以进货为主
  S6:=' (select t5.*,t1.DqJh from '+s5+' Right Join '+s1+' on ((t5.编码=t1.编码)and(t5.规格=t1.规格))) t6 ';
     //---Sqls=S6 Left Join S2
  Sqls:='Select t6.*,t2.DqCh From '+S6+' Left Join '+S2+ ' on ((t6.编码=t2.编码)and(t6.规格=t2.规格)) ';     with Aq_Find do
     begin
       close;
       SQL.Clear;
       SQL.Add(Sqls);
       Parameters.ParamByName('Y1').Value:=Year1.Text;
       Parameters.ParamByName('m1').Value:= Mon1.Text;
       Parameters.ParamByName('CkY1').Value:=Year1.Text;
       Parameters.ParamByName('Ckm1').Value:= Mon1.Text;
       Open;
     end;
可是只能得到一条记录,请问怎么实现
   名称       规格 编码 累计进货   6月进货   累计出货   6月出货   现库存
   尼龙线    T001白色 002 20         20      10          0          10

解决方案 »

  1.   

    s1 ,s2, s3, s4 保留拿t1 left join t3 得 t5
    合t2 left join t4 得 t6
    再拿 t5 full join t6  从这里边选数据就OK了..记得处理 空的情况噢...   full join 的时候, 最容易出现空了.. 拿t5.X 与 t6.X 判断一下就可以了..
      

  2.   

    上面语句中,是Delphi+Access 如何写呢,能给个具体点的代码吗,谢谢
      

  3.   

    access没有full join若想用语句实现,就是left join + right join + union
    否则就用建一个新表,用代码实现吧,先用left join查询,一笔笔添加到新表中,再用right join查询,然后添加,最后查询新表