我有一张包含以下数据的表格:
CUSIP SEDOL DESC
1111 NULL ABC Corp
1234 NULL ABCD Corp
NULL 12 ABCDE Corp
现在我在另一个数据库服务器上有另一个表:
CUSIP SEDOL DESC
1111 18 ABC Corp
1234 19 ABCD Corp
1246 12 ABCDE Corp
如何根据不同数据库服务器中表中提供的值填充第一个表中的NULL值? (我正在使用SQL Server 2005)
答案 0 :(得分:2)
update table1 set
sedol = (select sedol from database2.table2 where desc = table1.desc)
where sedol is null;
从您的问题中不清楚cusip
是否重要,所以您可能需要:
update table1 set
sedol = (select sedol from database2.table2 where cusip = table1.cusip)
where sedol is null;
要更新cusip,请使用:
update table1 set
cusip = (select cusip from database2.table2
where desc = table1.desc
and sedol = table2.sedol)
where cusip is null;
答案 1 :(得分:0)
Update BadTable set BadTable.SEDOL=Coalesce(BadTable.SEDOL,GoodTable.SEDOL) from GoodTable where GoodTable.[DESC]=BadTable.[DESC]
也许
where GoodTable.[CUSID]=BadTable.[CUSID]
答案 2 :(得分:0)
update table1 t1
set t1.sedol
= coalesce (t1.sedol,(select top 1 sedol
from table2
where t1.cusip = cusip
and t1.desc = desc))
答案 3 :(得分:0)
首先根据Tim的评论添加链接服务器。
然后,许多像这样的查询在匹配规则上进行了贬值。
Update
table1
Set
Sedol = t2.Sedol
From
table1 t1
Inner Join
server2.db2.schema2.table2 t2
On t1.CusIP = t2.CusIP and t1.[Desc] = t2.[Desc] And t1.Sedol Is Null
答案 4 :(得分:0)
添加链接服务器后,您的脚本将显示为
MERGE dbo.your_table AS target
USING [AnotherServer].dbo.your_table AS source
ON (target.[DESC] = source.[DESC])
WHEN MATCHED AND (target.CUSIP IS NULL OR target.SEDOL IS NULL)
THEN UPDATE SET target.CUSIP = source.CUSIP,
target.SEDOL = source.SEDOL;