表a:
  ID  数量   平均单价   金额
  1    3       2.0      6.0
  2    4       1.5      6.0
  3   11      3.0      33.0表b:
 ID  数量   平均单价   金额
  1    4       1.0      4.0
  2    -4      1.5      -6.0若表a的编号与表b的编号相同,则将表a的金额和数量分别与表b的金额和数量相加,结果如下:
表a:
  ID  数量   平均单价   金额
  1    7       2.0      10.0
  2    0       1.5       0
  3   11      3.0      33.0
然后判断表a中这些改变的记录(即与表b具有相同编号的记录)的数量是否为0,若数量不为0则计算平均单价=金额/数量,若数量为0则不计算? 请问用存储过程该如何实现(用sqlserver)?
(我刚开始学数据库没多久,请多多指教,谢谢!)

解决方案 »

  1.   

    一思路:
    select [id],sum(数量) as 数量,0 as 平均单价,sum(金额) as 金额  into #temp11 from  (select * from a union all  select * from b) c group by [id] 
    update #temp11 set 平均单价=金额/数量 where 数量<>0
    delete from A
    insert into A select * from #temp11
      

  2.   

    select a.数量+b.数量 form (select * from a join b on a.id=b.id)
    后面的一样。自己试试吧。
      

  3.   

    这两个表的ID如果不会重复的话,可以这样写:SELECT A.ID,
      IsNull(A.数量,0)+IsNull(B.数量,0) AS 总数量,
      IsNull(A.金额,0)+IsNull(B.金额,0) AS 总金额,
      (CASE IsNull(A.数量,0)+IsNull(B.数量,0)
      WHEN 0 THEN 0
      ELSE IsNull(A.金额,0)+IsNull(B.金额,0)/IsNull(A.数量,0)+IsNull(B.数量,0)
      END) AS 平均单价 
    FROM A
    LEFT JOIN B ON B.ID=A.ID
    GROUP BY A.ID
      

  4.   

    如果会重复的话:
    SELECT TT.ID,Sum(TT.数量) AS 总数量,
    (CASE IsNull(Sum(TT.数量),0) WHEN 0 THEN 0 ELSE Sum(TT.金额)/Sum(TT.数量) END) AS 平均单价,
    Sum(TT.金额) AS 总金额
    FROM 
    (SELECT ID,数量,金额 FROM A
    UNION ALL SELECT ID,数量,金额 FROM B) TT
    GROUP BY TT.ID