首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

在一个表中如果有相同记录的话,则进行修改操作,如果没有,则进行插入(多个条件),怎么来实现

2011-12-27 
在一个表中如果有相同记录的话,则进行修改操作,如果没有,则进行插入(多个条件),如何来实现?表一tblAnoidfI

在一个表中如果有相同记录的话,则进行修改操作,如果没有,则进行插入(多个条件),如何来实现?
表一     tblA
            noid         fItemId         fQty
            1                 2                     3
            1                 3                     9
            2                 9                     10
            20               2                     30


表二     tblB
            noid       fItemId     fQty
            1                 2                 90
            1                 3                 20
            1                 6                   1
            2                 9                   10
            20               1                     2
            20               2                   30

现在要实现的功能是:
        从表二中查询出来的记录,如果表二的noid   ,   fItemId   与表一的相同(tblA.noid=tblB.noid   and   tblA.fitemid=tblB.fitemid),则把表二fQty的值加入到表一fQty中,如果没有相同的记录,则把表二的值插入到表一中,请问如何来实现?
        操作后表一的记录如下
            noid       fItemId       fQty
              1             2                   93
              1             3                   29
              1             6                   1
              2             9                   20
              20           1                   2
              20           2                   60

[解决办法]
update tblA
set
fQty=a.fQty+b.fQty
from
tblA a,tblB b
where
a.noid=b.noid and a.fItemId=b.fItemId




insert into tblA(noid,fItemId,fQty)
select
*
from
tblB b
where
not exists(select 1 from tblA where noid=b.noid and fItemId=b.fItemId)

[解决办法]
update a
set fQty=a.fQty+b.fQty
from tblA a,tblB b
where a.noid=b.noid and a.fItemId=b.fItemId


insert tblA
select * from tblB b where not exists(select 1 from tblA where noid=b.noid and fItemId=b.fItemId)
[解决办法]
--创建测试环境
create table tblA(noid int,fItemId int,fQty int)
create table tblB(noid int,fItemId int,fQty int)

--插入测试数据
insert tblA(noid,fItemId,fQty)
select '1 ', '2 ', '3 ' union all
select '1 ', '3 ', '9 ' union all
select '2 ', '9 ', '10 ' union all
select '20 ', '2 ', '30 '

insert tblB(noid,fItemId,fQty)
select '1 ', '2 ', '90 ' union all
select '1 ', '3 ', '20 ' union all
select '1 ', '6 ', '1 ' union all
select '2 ', '9 ', '10 ' union all
select '20 ', '1 ', '2 ' union all
select '20 ', '2 ', '30 '

--求解过程
update a
set a.fqty = a.fqty + b.fqty
from tbla a
join tblb b on a.noid = b.noid and a.fitemid= b.fitemid

insert tbla
select * from tblb b
where not exists(select 1 from tbla where b.noid = noid and fitemid= b.fitemid)

select * from tbla
order by noid,fitemid
--删除测试环境
drop table tblA,tblB

/*--测试结果
noid fItemId fQty
----------- ----------- -----------
1 2 93
1 3 29
1 6 1
2 9 20
20 1 2
20 2 60
*/


热点排行
Bad Request.