关于两表更新的问题

yunnan201 2008-09-01 03:00:25
A表:

编号 进货编号 产品编码 剩余数量
----------- ----------- ----------- -----------
1 20080101 1 12
2 20080102 1 20
3 20080103 1 7


B表:

编号 进货编号 产品编码 出货数量
----------- ----------- ----------- ---------
1 20080101 1 6
1 20080101 1 6
2 20080102 1 3

结果表:
编号 进货编号 产品编码 剩余数量
----------- ----------- ----------- -----------
1 20080101 1 0
2 20080102 1 17
3 20080103 1 7

说明:A表为进货表,B表为出货表,根据出货表的出货数量更新进货表相应产品剩余数量
例如,编号为1的A表对应B表前两条记录,所以剩余数量=12-6-6,编号为3的A表对应
B表编号为2的这条记录,所以剩余数量=20-3,编号为3的B表没有,所以不更新

declare @a table(编号 int,进货编号 varchar(10),产品编码 int,剩余数量 int)
insert into @a(编号,进货编号,产品编码,剩余数量) values (1,20080101,1,12)
insert into @a(编号,进货编号,产品编码,剩余数量) values (2,20080101,1,20)
insert into @a(编号,进货编号,产品编码,剩余数量) values (3,20080101,1,7)

declare @b table(编号 int,进货编号 varchar(10),产品编码 int,出货数量 int)
insert into @b(编号,进货编号,产品编码,出货数量) values (1,20080101,1,6)
insert into @b(编号,进货编号,产品编码,出货数量) values (1,20080101,1,6)
insert into @b(编号,进货编号,产品编码,出货数量) values (2,20080102,1,3)
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zanyzyg 2008-09-01
  • 打赏
  • 举报
回复
create table #a (编号 int,进货编号 varchar(10),产品编码 int,剩余数量 int)
insert into #a(编号,进货编号,产品编码,剩余数量) values (1,20080101,1,12)
insert into #a(编号,进货编号,产品编码,剩余数量) values (2,20080101,1,20)
insert into #a(编号,进货编号,产品编码,剩余数量) values (3,20080101,1,7)

create table #b (编号 int,进货编号 varchar(10),产品编码 int,出货数量 int)
insert into #b(编号,进货编号,产品编码,出货数量) values (1,20080101,1,6)
insert into #b(编号,进货编号,产品编码,出货数量) values (1,20080101,1,6)
insert into #b(编号,进货编号,产品编码,出货数量) values (2,20080102,1,3)

update #a
set 剩余数量=剩余数量-t.出货数量
from (select 编号,sum(出货数量) as 出货数量 from #b group by 编号)t
where #a.编号=t.编号

select * from #a

drop table #a
drop table #b
lgxyz 2008-09-01
  • 打赏
  • 举报
回复
SELECT A.编号,A.进货编号,A.产品编码,出货数量=ISNULL(A.剩余数量,0)-ISNULL(B.出货数量,0) FROM @A A
LEFT JOIN (
SELECT 编号,进货编号,产品编码,SUM(出货数量)AS 出货数量 FROM @B GROUP BY 编号,进货编号,产品编码)B
ON A.编号=B.编号 AND A.进货编号=B.进货编号 AND A.产品编码=B.产品编码


/*
编号 进货编号 产品编码 剩余数量
----------- ---------- ----------- -----------
1 20080101 1 0
2 20080101 1 20
3 20080101 1 7

(所影响的行数为 3 行)
*/
zanyzyg 2008-09-01
  • 打赏
  • 举报
回复

update table @a
set 剩余数量=剩余数量-t.出货数量
from (select 编号,进货编号,产品编码,sum(出货数量) as 出货数量from @b group by 编号,进货编号,产品编码)t
where @a.编号=t.编号 and @a.进货编号=t.进货编号 and @a.产品编码=t.产品编码
 本套课程分为基础与中级两部分,分别就lua语言的各方面知识点进行探讨,学习完本套课程,对于后续Xlua(Tolua等框架)技术的学习提供强大的语言技术保证。       本套lua课程采用入门与商业级两种开发IDE进行教学:入门级的SciTE内置IDE与商业级的IDEA lua插件。本套课程学习完毕,对于除了传统手游外,在VR、AR、商业级大型应用程序、嵌入式设备开发等领域都有较强的指导作用。           《lua中级篇》分为:“函数的进阶”、“字符串进阶”、“Table进阶”、“元表”、“OOP面向对象”、“协同程序”、“IO操作”、“调试与运行”等八个大的章节,详细深入讲解lua开发的方方面面。        内容包含lua可变参数、闭包、模块、函数尾调用、字符串模式匹配、字符串不变性原理、矩阵、链表、元表详解与应用、协同的生命周期与生产消费者问题、lua文件各种读写操作、lua执行外部代码与错误异常处理垃圾收集机制等。       最后,lua中级篇的学习,对于广大学员开发商业级lua热更新技术,具有不可替代的重要作用! 热更新系列(技术含量:中高级):B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136 

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧