4个表
表1:user_name(id,dept_id,user_name,pwd)其中:dept_id是所属部门id
表 2:dept_name(id,pid,dept_name)其中:pid为父id,这里用不上
表3:dz_name(id,dz_name)此表为物品分类表
表4:dz_list(id,dz_id,f_uid,s_uid,dz_count,f_datetime)其中:dz_id对应物品分类表的 id,f_uid对应发货人id,s_uid对应收货人id,dz_count对应单笔发货单的数量,f_datetime为发货时间现要求:按物品名分组前台通过 提交 部门id(比如:id=2)及某个时间段,查询dz_list表,通过dz_list要得到所对应部门在某个时间段的发货量:
发货部门   收货部门   物品名   数量我全是用select嵌套,觉得好麻烦而且很容易出错。 望各位高手指点,谢谢!

解决方案 »

  1.   


    select a.dept_name 发货部门,b.dept_name 收货部门,c.dz_name 物品名,dz_count 数量
    from dz_list t left join [user_name] t1 on t1.id=t.f_uid left join dept_name a on t1.dept_id=a.id
     left join [user_name] t2 on t2.id=t.s_uid left join dept_name b on t2.dept_id=b.id
     left join dz_name c on t.dz_id=c.id
      

  2.   


    dz_list中的记录可能是同一个物品名称(dz_list是一个清单),所以同物品名的需要 sum,group by。按物品名分组,怎么弄呢?
      

  3.   


    --try:select 发货部门=a.dept_name,收货部门=d.dept_name,物品名=f.dz_name,sum(counts) from dept_name a,user_name b,
    (select dz_id,f_uid,s_uid,counts=sum(dz_count) from dz_list group by f_uid,s_uid,dz_id)c,
    dept_name d,user_name e,dz_name f
    where a.id=b.dept_id and b.id=c.f_uid and c.dz_id=f.id
    and d.id=e.dept_id and e.id=c.s_uid
    group by a.dept_name,b.dept_name,f.dz_name
      

  4.   

    方法一:
    select 发货部门=a.dept_name,收货部门=d.dept_name,物品名=f.dz_name,sum(counts) from dept_name a,user_name b,
    (select dz_id,f_uid,s_uid,counts=sum(dz_count) from dz_list group by f_uid,s_uid,dz_id)c,
    dept_name d,user_name e,dz_name f
    where a.id=b.dept_id and b.id=c.f_uid and c.dz_id=f.id
    and d.id=e.dept_id and e.id=c.s_uid
    group by a.dept_name,b.dept_name,f.dz_name
    方法二:select a.dept_name 发货部门,b.dept_name 收货部门,c.dz_name 物品名,dz_count 数量
    from dz_list t 
    left join [user_name] t1 on t1.id=t.f_uid 
    left join dept_name a on t1.dept_id=a.id
    left join [user_name] t2 on t2.id=t.s_uid 
    left join dept_name b on t2.dept_id=b.id
    left join dz_name c on t.dz_id=c.id