yuti
卡卡西
采纳率100%
2015-04-15 15:35 阅读 3.8k
已采纳

根据出库表和入库表数据统计生成出入库统计表,SQL语句写法?

比较简易的出入库管理中,出库表包括:产品名称、出库数量、出库时间;入库表包括:产品名称、入库数量、入库时间;我需要得到的是在指定时间段内的每一个产品的入库总数量 出库总数量。
哪位老师可以帮我写出这个SQL语句呢?MS SQL DELPHI2010

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    danielinbiti danielinbiti 2015-04-15 16:02

    类似这样把,没调试,自己调测一下吧

     select * from (select distinct 产品名称 from 出库表 union select distinct 产品名称 from 入库表) t left join
    (SELECT SUM(出库数量) 出库,产品名称 出产品名称 from 出库表 where 出库时间>=开始时间 and 出库时间<=结束时间 group by 产品名称) t1
    on t.产品名称=t1.出产品名称
    left join
    (SELECT SUM(入库数量) 入库,产品名称 入产品名称 from 入库表 where 入库时间>=开始时间 and 入库时间<=结束时间 group by 产品名称) t2
    on t.产品名称=t2.入产品名称
    
    点赞 2 评论 复制链接分享
  • danielinbiti danielinbiti 2015-04-15 15:39

    SELECT SUM(出库数量),产品名称 from 出库表 where 出库时间>=开始时间 and 出库时间<=结束时间 group by 产品名称

    入库也一样

    点赞 评论 复制链接分享
  • yuti 卡卡西 2015-04-15 15:42

    最后要放在一张表中体现出来,如果出库表中某产品有出库记录,入库表没有它的记录,这样如何合并呢?

    点赞 评论 复制链接分享
  • smalldata smalldata 2015-04-15 15:55

    outer join two result sets

    点赞 评论 复制链接分享
  • yuti 卡卡西 2015-04-15 16:32

    sql:='delete from pdtcrk';
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add(sql);
    adoquery1.ExecSQL;
    adoquery1.Close;
    adoquery1.SQL.Clear;
    sql:='select * from (select distinct pdtname from outlib union select distinct pdtname from inlib) t left join';
    sql:=sql+'(SELECT SUM(outnum) as cknum,pdtname as cpn from outlib where outdate>=:d1 and outtime<:d2 group by pdtname) t1';
    sql:=sql+'on t.pdtname=t1.cpn left join(SELECT SUM(innum) as rknum,pdtname as rpn from inlib where indate>=:d1 and indate<:d2 group by pdtname) t2';
    sql:=sql+'on t.pdtname=t2.rpn';
    adoquery1.SQL.Add(sql);
    adoquery1.Parameters[0].Value:=trunc(d1.DateTime);
    adoquery1.Parameters[1].Value:=trunc(d2.DateTime)+1;
    adoquery1.Parameters[2].Value:=trunc(d1.DateTime);
    adoquery1.Parameters[3].Value:=trunc(d2.DateTime)+1;
    adoquery1.ExecSQL;

    点赞 评论 复制链接分享

相关推荐