日期:2014-05-17  浏览次数:20502 次

更新最大的那一行
现在有两个表a,b
表a是这样的
区分   金额
----------------------------------------------
1     100
1     200
2     100
3     100

表b
金额
------------------------
50

想要的结果是,如果有区分为1的记录的话,就把50更新到区分为1的复数条里的最大的,如果没有区分为1的记录就更新区分为2的记录,如果没有为2的就更新3的

结果

区分   金额
----------------------------------------------
1     100
1     250
2     100
3     100

------解决方案--------------------
版主,这句select MIN([区分])[区分],MAX([金额]) MAX金额
from [a] 有点凑巧了,最小分区对应的最大金额

------解决方案--------------------
if object_id('[a]') is not null drop table [a]
go 
create table [a]([区分] int,[金额] int)
insert [a]
select 1,100 union all
select 1,200 union all
select 1,300 union all
select 3,100
--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go 
create table [b]([金额] int)
insert [b]
select 50
--------------开始查询--------------------------
SELECT * FROM a
UPDATE a 
SET a.金额=a.金额+(SELECT [金额] FROM b)
FROM a
WHERE EXISTS(SELECT 1 FROM (SELECT 区分,MAX(金额)金额 FROM a  WHERE 区分 =(SELECT MIN(区分)区分 FROM a) GROUP BY 区分)b WHERE a.区分=b.区分 AND a.金额=b.金额)

SELECT * FROM a

/*
区分          金额
----------- -----------
1           100
1           200
1           300
3           100

(4 row(s) affected)

(1 row(s) affected)

区分          金额
----------- -----------
1           100
1           200
1           350
3           100
*/