求条件更新语句

Neusoft06 2015-03-20 05:44:26
有两张表
Table1
Tcode Ccode PDcode Rate
T1 C1 pd001 0.012
T2 C1 NULL 0.022
T3 C2 NULL 0.036

Table2
PDcode Rate
pd001 0.01
pd002 0.02
pd003 0.03
pd004 0.04
......................

需求来了

将Table1的PDcode为NULL的记录更新为Table2的PDcode ,条件是取Table1的Rate在Table2里的Rate的接近值
更新结果如下
Table1
Tcode Ccode PDcode Rate
1 1 pd001 0.012
2 1 pd002 0.022
3 2 pd004 0.036

UPDATE Table1 SET PDcode =(
SELECT * FROM Table2
WHERE ABS(Table2.Rate-0.22)=(SELECT MIN(ABS(Rate-0.22)) FROM Table2 )
WHERE Table1.Tcode ='T2' AND Ccode ='C1'

怎样动态传入0.22,T2,C1的值呢
现在的做法是先取Table1的信息,然拼接SQL逐条更新
又没有更好的写法呢?

...全文
131 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
还在加载中灬 2015-03-20
  • 打赏
  • 举报
回复 1
UPDATE Table1
SET PDcode=(SELECT TOP 1 PDcode FROM Table2 ORDER BY ABS(Table1.Rate-Table2.Rate))
WHERE PDcode IS NULL
兼容SQL2000 SQL2005+可以用CROSS APPLY
江南小鱼 2015-03-20
  • 打赏
  • 举报
回复 1

UPDATE Table1
SET PDcode=(SELECT TOP 1 PDcode FROM Table2 ORDER BY ABS(Table1.Rate-Table2.Rate))
WHERE isnull(PDcode,'')=''

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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