有一个公司有10个仓库,每个仓库管理员负责1-3个仓库,怎么计算一段时间内,某管理员负责的仓库的进货量?用户表我这样设计(简化了):
yhm ck1 ck2 ck3 ... ck10,用户名:字符型,仓库:布尔型。
在用户管理中,给仓库管理员赋权限,如果负责2号、5号仓库,那么ck2、ck5值为ture。进货表这样设计:
jhsj jhsl ck,进货时间:日期型,进货数量:数字型,仓库:数字型。如果再加个“仓库管理员”也有问题,因为过一段时间,可能这个仓库管理员负责其它仓库了。这两个表设计不知是否合理?

解决方案 »

  1.   

    直接在进货表里面按照你的条件查询不就行了,不用管仓库管理员是否调岗,与调岗无关,即使他调岗了,在之前的进货单里面有其记录
    Select 仓库管理员,SUM(jhsl) As jhsl From 进货表 Where jhsj>='开始日期' and jhsj<='结束日期' Group by 仓库管理员
      

  2.   

    先获得所负责的仓库列表(id),然后根据id去查select sum(xx) from xxx where id in(1,2,3)
      

  3.   

    感谢bdmh”这位大师,不过有两个问题:
    1、如何获取某管理员负责的仓库,并将其放在变量ck1、ck2、ck3(数字型)中。我想了个笨办法,只是不好意思帖出来。
    2、管理员有可能负责1个仓库,有可能负责3个仓库。如果ck3为空(或零),那么 in (ck1,ck2,ck3)对结果有影响吗?
        或者使用 if (ck1>0) and (ck2=0) and (ck3=0) then ...=ck1
                if (ck1>0) and (ck2>0) and (ck3=0) then ...in (ck1,ck2)
                if (ck1>0) and (ck2>0) and (ck3>0) then ...in (ck1,ck2,ck3) ? 
      

  4.   

    那在查询条件where那里再加一个当前仓库代号过滤不就是当前仓库当前仓库管理员所进的货吗
      

  5.   

    这个问题说起来有点...我是把一个问题简化成这么一个问题。
    要查询的是某仓库管理员“当前”负责的仓库在某段时间的进货量,也就是说有些货并不是他进的,他进的货也可能不包括在其中。怎么知道某仓库管理员负责那几个仓库,并赋值给c1,c2,c3呢?我贴个很笨的代码,希望大家指正:procedure TForm1.Button1Click(Sender: TObject);
    var
      i,j,k:integer;
      c1,c2,c3:integer;
    begin
      c1:=0;
      c2:=0
      c3:=0;
      with ADOQuery1 do  //先搜出包含某管理员的用户记录
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from yhb where yhm=:yhm');//yhb:用户表
        Parameters.ParamByName('yhm').Value:=yhm;   //登录后用户名已有了值
        Open;    for i:=1 to 10 do
          if Fields[i].AsBoolean=true then
          begin
            c1:=i;
            bereak;
          end;    for j:=i+1 to 10 do
          if Fields[j].AsBoolean=true then
          begin
            c2:=j;
            bereak;
          end;    for k:=j+1 to 10 do
          if Fields[k].AsBoolean=true then
          begin
            c3:=k;
            bereak;
          end;
      end;
    end;  
      

  6.   

    我怎么没有修改的权限?break打错了。
    另外本来是缩进的代码,到这里都不行了。怎么弄?