有两个表CANGKU仓库表:代号,名称,型号,数量,产品类型(底板和配件)、类型(对应出库、入库、损耗和修板)
DBLB底板列表:对应仓库表中的底板中使用的配件信息
如:CANGKU 代号    名称    型号   数量 产品类型   类型
           10001   音乐狗  J1021  100  底板       出库
           100110  电阻    1000M  20   配件       损耗    DBLB   代号   名称    型号   配件代号 配件名称  配件型号  数量
           10001  音乐狗  J1021  100110   电阻      DZ1001     2
           10001  音乐狗  J1023  100210   电容      DZ1022     3现在我需要统计出总共用去电阻的数量:包括总数量:出库100×2+20  及分类:成品耗品(100×2) 损耗20
即:代号    名称    数量   成品耗品  损耗
    100110  电阻    220    200        20
请问SQL语句应如何写?

解决方案 »

  1.   

    本来想帮你写个 sql语句的,但是你这两个表的关系我都没看懂。只能帮你顶了。其实如果你的数据规划科学了,用sql统计,应该是很容易的事情,关键就是你建立表时,如果关系、格式不科学,那就不是很好办了。正确建立表是开发系统的基础
      

  2.   

    就是CANGKU中的10001这种底板用到的配件对应DBLB中的记录,但我需要统计出每种配件(如电阻)的用去的数量
      

  3.   

    大概是这个样子:SELECT DBLB.p_codes, DBLB.codes, DBLB.names, (CANGKU.counts * DBLB.counts + (select sum(CANGKU.counts) from CANGKU where CANGKU.codes = '100110' and CANGKU.types = '损耗')) AS 数量, CANGKU.counts * DBLB.counts, (select sum(CANGKU.counts) from CANGKU where CANGKU.codes = '100110' and CANGKU.types = '损耗') AS 损耗
    FROM CANGKU, DBLB
    WHERE DBLB.p_codes = '100110' and CANGKU.codes <> '100110';
      

  4.   

    上面代码有错误,修改一下:SELECT DBLB.p_codes, DBLB.codes, DBLB.names, (CANGKU.counts * DBLB.counts + (select sum(CANGKU.counts) from CANGKU where CANGKU.codes = '100110' and CANGKU.types = '损耗')) AS 数量, CANGKU.counts * DBLB.counts, (select sum(CANGKU.counts) from CANGKU where CANGKU.codes = '100110' and CANGKU.types = '损耗') AS 损耗
    FROM CANGKU, DBLB
    WHERE DBLB.p_codes = '100110' and CANGKU.codes = '10001';
    其中:
    (select sum(CANGKU.counts) from CANGKU where CANGKU.codes = '100110' and CANGKU.types = '损耗') AS 损耗是获得CANGKU表中编号为100110,类型是损耗的所有配件的总量。
    CANGKU.counts * DBLB.counts 是获得DBLB表中的底板所消耗的配件的总量。WHERE DBLB.p_codes = '100110'是限定CANGKU.counts * DBLB.counts获得的是底板所消耗的'100110'配件的总量
    and CANGKU.codes = '10001' 是限定在CANGKU.counts * DBLB.counts中只用编号为10001的做基数。
      

  5.   

    select 代号,sum(出库+损耗) as 数量,sum(成品耗品) as 成品耗品,sum(损耗) as 损耗 from 
    (select 
    case 
    where b.代号 is null then a.代号
    else b.配件代号
    end  as 代号,case
    when a.类型='出库' then a.数量*isnull(b.数量,1)
    else 0
    end as 成品耗品,case 
    when a.类型='损耗' then a.数量*isnull(b.数量,1)
    else 0
    end as 损耗,from cangku a
    left join dblb b on a.代号=b.代号
    ) k
    group by 代号//写好了,不过没经过测试,楼主试试看