当前位置: 代码迷 >> Sql Server >> 存储过程,有点复杂
  详细解决方案

存储过程,有点复杂

热度:73   发布时间:2016-04-24 09:24:41.0
求一个存储过程,有点复杂
CREATE TABLE [dbo].[TestTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
    [MoTypeId] int ,
[soCode] varchar(50),
[MoQty] int ,
[MoInQty] int ,
[HuoWei] varchar(50)
) ON [PRIMARY]

insert into [dbo].[TestTable]([MoTypeId],[soCode],[MoQty],[MoInQty],[HuoWei])values(1,'SO-001',100,100,'')
insert into [dbo].[TestTable]([MoTypeId],[soCode],[MoQty],[MoInQty],[HuoWei])values(1,'SO-001',100,100,'')
insert into [dbo].[TestTable]([MoTypeId],[soCode],[MoQty],[MoInQty],[HuoWei])values(2,'SO-001',100,0,'')
insert into [dbo].[TestTable]([MoTypeId],[soCode],[MoQty],[MoInQty],[HuoWei])values(1,'SO-002',200,0,'')
insert into [dbo].[TestTable]([MoTypeId],[soCode],[MoQty],[MoInQty],[HuoWei])values(1,'SO-002',200,200,'')
insert into [dbo].[TestTable]([MoTypeId],[soCode],[MoQty],[MoInQty],[HuoWei])values(2,'SO-002',400,0,'')

MoTypeId=2表示组装工单,MoTypeId=1表示金工工单
我现在需要做一个存储过程,更新HuoWei字段,
条件是:如果同一个销售订单的每笔金工工单入库数都大于等于工单数时,
更新这个销售订单所对应的所有工单的HuoWei字段为 '好' 

------解决思路----------------------

create proc update_HuoWei
as
declare @socode varchar(50)

begin
update a set HuoWei='好'
from TestTable a 
left outer join (select sum(MoInQty)MoInQty,soCode from TestTable where MoTypeId=1 group by soCode)b on a.soCode=b.soCode
left outer join (select sum(MoQty)MoQty,soCode from TestTable where MoTypeId=1 group by soCode)c on a.soCode=b.soCode
where a.MoTypeId=2 and isnull(b.MoInQty,0)>=isnull(c.MoQty,0)
end
  相关解决方案