两个表  表A:部门类型  物料id  单价  型号 数量  价格
表B:物料id  部门id要求:
(1)、通过表B的关系将A表的“部门类型”为0的物料id字段转换成“部门id”,并将这些记录的部门类型设为1;
(2)、在(1)查询后的结果中会有一些记录的“部门id” and “型号”相等的记录,然后的工作是合并这些有着相同性质的记录:汇总有这些相同性质的数量,更新“数量”字段为汇总的数量,并根据汇总的数量*“单价”更新“价格”列,最后将这些汇总的记录再插到A表中。
整个过程后表A中原来的记录不变,只是又新插入通过(1)、(2)查询的结果。
整个过程表A的结构没变,说明:当部门类型 =0, “物料id”存储的就是“物料id”;当部门类型=1, “物料id”存储的就是“部门id”。

解决方案 »

  1.   

    每个步骤的SQL语句并不复杂,只是注意逻辑要理清楚。
      

  2.   

    Insert Into A (部门类型 ,物料id ,单价 ,型号,数量,价格) 
    select 0,b.部门id,单价 ,型号,数量,价格 From a,b
    where a.物料id=b.物料id and a.部门类型=0;Insert Into A (部门类型 ,物料id ,单价 ,型号,数量,价格) 
    Select 1,物料id,单价,型号,sum(数量),sum(数量*单价)
    from a where 部门类型=1 group by 物料id ,单价 ,型号 having count(物料id)>1
      

  3.   

    十分感谢active 
    您的方法是用了两次insert 这样的话会出现很多垃圾记录
    我是想这样写:
    insert into A( BMLX ,--部门类型
      BM   ,--物料id
      DJ  , --单价
      LXH  ,--型号
      SL  ,--数量
      ZJ) --价格
      select 1,
             (select b.bmid from b where b.wlid = A.bm) as hzsl,
             DJ,
             LXH,
             sum(SL),
             sum(SL*DJ) 
        from A
       where BMLX = 0
       group by  (select b.bmid from b where b.wlid = A.bm) , LXH
    问题是这样写语法上是错误的,希望您能在这个的基础上给改改;
      

  4.   


    --insert data...
    create table A
    (
      BMLX NUMBER,
      BM   NUMBER,
      DJ   NUMBER,
      LXH  VARCHAR2(10),
      SL   NUMBER,
      ZJ   NUMBER
    );
    create table B
    (
      WLID NUMBER,
      BMID NUMBER
    );--sql test..
    insert into A( BMLX ,--部门类型 
      BM  ,--物料id 
      DJ  , --单价 
      LXH  ,--型号 
      SL  ,--数量 
      ZJ) --价格 
    select 1,b.bmid,DJ,LXH,sum(SL),sum(SL*DJ) 
    from A ,B
    where A.BMLX = 0 
    and a.bm=b.wlid
    group by  b.bmid,DJ,LXH
      

  5.   


    insert into A( BMLX ,--部门类型 
      BM  ,--物料id 
      DJ  , --单价 
      LXH  ,--型号 
      SL  ,--数量 
      ZJ) --价格 
    select 1,BMID,MAX(DJ),LXH,SUM(SL),SUM(SL*DJ) from
      (select b.BMID,a.DJ,a.LXH,a.SL,a.ZJ from a left join b on a.BM=b.WLID and a.BMLX=0)
    group by BMID,LXH你的查询语句里第二个字段和group by字句里的语法不对
    group by 后面的where条件移到前面的where 后面去