首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

一个SQL统计语句解决思路

2013-01-25 
一个SQL统计语句str1:select iif(isnull(sum(enterwh.入库数量)),0,sum(enterwh.入库数量)) as 存量1 fr

一个SQL统计语句


    str1:='select iif(isnull(sum(enterwh.入库数量)),0,sum(enterwh.入库数量)) as 存量1 from enterwh where 编码="'+Trim(edit1.Text)+'"';
    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add(str1);
    ADOQuery2.Open;
    if ADOQuery2.RecordCount>0 then
     s1:=ADOQuery2.fieldbyname('存量1').asString;



    str2:='select iif(isnull(sum(outwh.出库数量)),0,sum(outwh.出库数量)) as 存量2 from outwh where 编码="'+Trim(edit1.Text)+'"';
    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add(str2);
    ADOQuery2.Open;
    if ADOQuery2.RecordCount>0 then
     s2:=ADOQuery2.fieldbyname('存量2').asString;

    str3:='select 编码,名称,规格型号,数量 as 库存量 from stock where 编码="'+Trim(edit1.Text)+'"';
    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add(str3);
    ADOQuery2.Open;
    if ADOQuery2.RecordCount>0 then
    begin
    temp:=ADOQuery2.fieldbyname('库存量').asString;
    Edit5.Text:=IntToStr(StrToInt(temp)+StrToInt(s1)-StrToInt(s2));
    end;

两头省有语句,主要意思就是把入库表和出库表对应编码的数量合计下,然后拿基本表里同一编码的数量+入库表的数量和-出库表的数量和=这个编码物品的现存量,希望一句求出来
我原来是这样写的:
str:='select stock.名称,stock.规格型号,stock.编码,'
       +'(stock.数量+iif(isnull(sum(enterwh.入库数量)),0,sum(enterwh.入库数量))-iif(isnull(sum(outwh.出库数量)),0,sum(outwh.出库数量))) as 库存量'
       +' from (stock LEFT JOIN outwh ON (stock.编码=outwh.编码))'
       +' LEFT JOIN enterwh ON (stock.编码=enterwh.编码)'
       +' where 编码="'+Trim(edit1.Text)+'"'
       GROUP BY stock.编码,stock.名称,stock.规格型号,stock.数量';
这样的话如果出入库里都是对应一条记录的话还可以,要是对应多条就会出错,会出现重复加减操作
麻烦各位了
delphi+access
[解决办法]
1.其实只要是有关库存的软件,都有这个报表的,列出入库与出库的明细,数据多的话,可以限定他只能查某一个产品或者某个时间段

2.库存表加一个库存量的字段,出/入库时就统计出最后的库存回写到此字段,查库存时就直接查库存表,
但出错是难免的,要看你如何统计了,只要保证正常操作下正确即可,有错就根据第1个报表去检查了
[解决办法]
如果出入库表用触发器,就不存在库存不正确的问题。
[解决办法]
1 出入库表必须有, 因为要存放出入库单据备查,还有红冲等情况都需体现
2 实时库存表,看数据量大小和操作频率, 可以通过出入库表或台账建视图, 或独立建表

热点排行