求一个sql语句,数据库是这样的。产品是一个表,记录产品的各项参数信息,组成产品的材料是另一个表。记录所有的材料信息。然后是材料与产品对应的每个产品的bom单,(bom单即生产一个产品所需的全部材料信息)。大致如下
产品表:产品id,产品名称。
材料表:材料id,材料名次。
bom表:bomid,对应产品id,对应物料id,使用数量。
现在假如我要生产3个产品a,4个产品b,5个产品c。等等。如何用一条sql语句查询出总共所需的材料及数量。
a,b,c的bom可能用到同一个材料,但使用不同的数量。
求高手解答

解决方案 »

  1.   

    贴建表及插入记录的SQL,及要求结果出来看看
      

  2.   

    SELECT `bom表`.`对应物料id`,`材料表`.`材料名次`,SUM(`bom表`.`使用数量`) AS sums 
    FROM `产品表` 
    LEFT JOIN `bom表` ON `产品表`.`产品id`=`bom表`.`对应产品id` 
    LEFT JOIN `材料表` ON `bom表`.`对应物料id`=`材料表`.`材料id` 
    GROUP BY `bom表`.`对应产品id` 
      

  3.   

    select m.材料id,m.材料名次,
    sum( b.使用数量 * 
    case p.产品名称 
    when '产品a' then 3
    when '产品b' then 4
    when '产品c' then 5
    end 
    )
    from 产品表 p, bom表 b, 材料表 m
    where p.产品id=b.对应产品id and m.材料id=b.对应物料id
    and p.产品名称 in ('产品a','产品b','产品c')
      

  4.   

    其实还有一个表,就是生产计划表,如下:
    计划id,对应产品id,生产数量。
    现在的目的是知道几个生产计划的id。如何求出所需物料。
      

  5.   

    材料表:
    CREATE TABLE `material_info` (
      `material_id` char(16) NOT NULL,
      `material_name` varchar(15) NOT NULL,
      `material_type` char(16) NOT NULL,
      PRIMARY KEY (`material_id`)

    产品表:
    CREATE TABLE `product_info` (
      `pr_id` char(16) NOT NULL,
      `pr_name` varchar(20) NOT NULL,
      `pr_type` char(6) NOT NULL,
      PRIMARY KEY (`pr_id`)
    )
    bom表:
    CREATE TABLE `bom_xx_info` (
      `bom_xx_id` char(16) NOT NULL,
      `bom_xx_product_id` char(16) NOT NULL,
      `bom_xx_mat_id` char(16) NOT NULL,
      `bom_xx_num` int(10) NOT NULL,
      PRIMARY KEY (`bom_xx_id`)
    )
    生产计划表:
    CREATE TABLE `plan_info` (
      `plan_id` char(16) NOT NULL,
      `plan_prodcut_id` char(16) NOT NULL,
      `plan_num` int(10) NOT NULL,
      PRIMARY KEY (`plan_id`)
    )
      

  6.   

    select m.材料id,m.材料名次,
        sum(    b.使用数量 * p.生产数量    )
    from 生产计划表 p, bom表 b, 材料表 m, 
    where p.对应产品id=b.对应产品id and m.材料id=b.对应物料id
    and p.计划id in (1,2,3)
      

  7.   

    后面还得加上group by m.材料id