2010-08-10 49 views
1

我有两个表,我想加入到一个表中,并使用TypeID来区分它们。比方说,类型为A和B的表是A_Level和B_LevelSQL合并两个表并更新引用ID

A的表看起来像

级别
Level_ID说明

B的表看起来像

级别
Level_ID LEVEL_DESC

A的Level_ID从表C引用为Level_ID
B的Level_ID从表D引用为Level_ID

我正在查找将两个表合并成一个表(Level_Code)并相应地更新引用的表ID的脚本。

任何帮助,非常感谢。

+1

您使用的数据库是?你确定TableA和TableB中没有重复的ID号吗? – JNK 2010-08-10 14:48:47

+0

TableA和TableB中存在重复的ID号,这就是为什么我需要使用新ID更新参考表 – Gage 2010-08-10 14:50:54

+0

好的,您使用的是哪个DB? – JNK 2010-08-10 14:53:26

回答

1
select a.Level_Id ALevelId, b.Level_Id BLevelId, 
     case ISNULL(a.Level_Id, 0) when 0 then 'B' else 'A' end AS Type, 
     case ISNULL(a.Level_Id, 0) when 0 then b.Level_Id else a.Level_Id end AS NewLevel_Id 
INTO Dummy  
FROM a 
FULL JOIN b On (a.Level_ID = b.Level_ID); 


UPDATE c 
SET c.Level_id = Dummy.NewLevel_Id 
from Dummy, c 
WHERE c.Level_Id = Dummy.ALevelId 
AND Dummy.Type = 'A'; 

UPDATE d 
SET d.Level_id = Dummy.NewLevel_Id 
from Dummy, d 
WHERE d.Level_Id = Dummy.BLevelId 
AND Dummy.Type = 'B'; 

SELECT Dummy.NewLevel_Id, a.Level, a.LevelDesc As Description 
INTO YourNewTable 
from Dummy JOIN a ON (Dummy.ALevelId = a.Level_Id) 
Where Dummy.Type = 'A' 
UNION 
SELECT NewLevel_Id, Level, LevelDesc As Description 
from Dummy JOIN b ON (Dummy.BLevelId = b.Level_Id) 
Where Dummy.Type = 'B' 

DROP TAble Dummy; 
+0

Im在关键字'AS'附近获得错误的语法。从查询的第二行以及reate Table YourNewTable – Gage 2010-08-10 15:40:42

+0

@Gage之后,我已经更新了脚本 – 2010-08-10 16:22:15