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

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

5个回答

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

 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.入产品名称
danielinbiti
danielinbiti 回复卡卡西: 但不调测,把拼接的语句打印出来,上客户端执行过了再放到程序中。你这拼接出来的语句肯定不对,表名都和on连在一起了。
接近 5 年之前 回复
yuti
卡卡西 上面就是我按你的代码修改后的代码,运行提示第一行的 t 附近有语法错误 帮我看一下呗
接近 5 年之前 回复
danielinbiti
danielinbiti 回复卡卡西: SELECT SUM(出库数量) 出库,产品名称 出产品名称 from 出库表。 产品名称的别名呀
接近 5 年之前 回复
yuti
卡卡西 sql:='select * from (select distinct pdtname from outlib union select distinct pdtname from inlib) t left join';
接近 5 年之前 回复
yuti
卡卡西 我正在调试 第四行的t.产品名称=t1.出产品名称 ,最后的出产品名称是什么,没有这个字段
接近 5 年之前 回复
danielinbiti
danielinbiti 回复卡卡西: 时间要自己设置的,其他的算SQL语法。自己上客户端调试一下吧
接近 5 年之前 回复
yuti
卡卡西 这一大段是一条完整的SQL语句吗?直接把这个语句赋值给ADOQUERY控件就可以了吗?
接近 5 年之前 回复

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

入库也一样

yuti
卡卡西 最后要放在一张表中体现出来,如果出库表中某产品有出库记录,入库表没有它的记录,这样如何合并呢?
接近 5 年之前 回复

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

outer join two result sets

yuti
卡卡西 可以给出详细语句
接近 5 年之前 回复

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;

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问