表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)?
(我刚开始学数据库没多久,请多多指教,谢谢!)
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)?
(我刚开始学数据库没多久,请多多指教,谢谢!)
解决方案 »
- 在一个窗体内调用另一个窗体的函数为何会失败?
- 怎么让<asp:text>标签密码框中显示默认值,在线等
- 通过IP如何连接FTP
- DatdGridView 的 SelectionBackColor 可以去掉吗?
- 问个问题:组合键的实现
- .net错误问题
- 偶有一个奇怪的想法,不知道有实现的可能没,高人请进
- 一个远程收费系统的技术问题?
- 美化.net windows程序界面的工具
- while (true) { if (a<b) then break} ? while (a<b) {} ? 哪个方案好一些呢??
- listview添加的时候默认是添加到最后,有办法添加到前面吗?
- 如何判断系统中已经装有.NET Framework?(急)
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
后面的一样。自己试试吧。
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
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