我发现2个表的每行数据非常不同。现在我只是想知道它们如何才能正确更新。我试图使用LIKE或CONTAINS但我不知道如何实现它们,因为数据是严格不同的单词或数据。希望你能帮助我。非常感谢你。
DECLARE @MyTable1 TABLE(Id int identity(1,1), LandId nvarchar(10), Block nvarchar(100), Floor nvarchar(10), Unit nvarchar(10), TransactionPrice nvarchar(100), SalePrice nvarchar(100), ActualSize nvarchar(100))
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'2/F', N'B', N'4011177', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'2/F', N'C', N'5611194', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'2/F', N'D', N'4357460', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'3/F', N'B', N'3374514', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'3/F', N'C', N'4863924', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'3/F', N'D', N'3373659', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'3/F', N'E', N'4602343', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'5/F', N'B', N'3409569', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'5/F', N'C', N'5134571', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'5/F', N'D', N'3409569', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'5/F', N'E', N'4125204', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'6/F', N'B', N'3598611', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'6/F', N'C', N'5189044', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'6/F', N'D', N'3444624', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', N'北翼 North Wing', N'6/F', N'E', N'4669060', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', NULL, N'15', N'C', N'27353000', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', NULL, N'15', N'B', N'28414000', N'0', N'0'
INSERT INTO @MyTable1 SELECT N'1', NULL, N'15', N'A', N'25556000', N'0', N'0'
SELECT * FROM @MyTable1
DECLARE @MyTable2 TABLE(Id int identity(1,1), LandId nvarchar(10), Block nvarchar(100), Floor nvarchar(10), Unit nvarchar(10), TransactionPrice nvarchar(100), SalePrice nvarchar(100), ActualSize nvarchar(100))
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'2樓 2/F', N'B', N'NULL', N'4082800', N'14793'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'2樓 2/F', N'C', N'NULL', N'6562800', N'18230'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'2樓 2/F', N'D', N'NULL', N'4586800', N'18130'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'3樓 3/F', N'B', N'NULL', N'3946800', N'14950'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'3樓 3/F', N'C', N'NULL', N'5688800', N'14662'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'3樓 3/F', N'D', N'NULL', N'3945800', N'14723'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'3樓 3/F', N'E', N'NULL', N'5153800', N'16106'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'5樓 5/F', N'B', N'NULL', N'4153800', N'15050'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'5樓 5/F', N'C', N'NULL', N'6770800', N'13989'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'5樓 5/F', N'D', N'NULL', N'7769800', N'14688'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'5樓 5/F', N'E', N'NULL', N'4836800', N'13252'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'6樓 6/F', N'B', N'NULL', N'4196800', N'15261'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'6樓 6/F', N'C', N'NULL', N'6840800', N'14134'
INSERT INTO @MyTable2 SELECT N'1', N'南翼 South Wing', N'6樓 6/F', N'D', N'NULL', N'7849800', N'14839'
INSERT INTO @MyTable2 SELECT N'1', N'北翼 North Wing', N'6樓 6/F', N'E', N'NULL', N'4914800', N'13728'
INSERT INTO @MyTable2 SELECT N'1', N'帝滙豪庭 Wellesley', N'15', N'C', N'NULL', N'39905000', '23000'
INSERT INTO @MyTable2 SELECT N'1', NULL, N'15', N'B', N'NULL', N'28414000', '24100'
INSERT INTO @MyTable2 SELECT N'1', N'帝滙豪庭 Wellesley', N'15', N'A', N'NULL', N'25556000', '22100'
SELECT * FROM @MyTable2
UPDATE
x
SET
x.Block = y.Block,
x.SalePrice = y.SalePrice,
x.ActualSize = y.ActualSize
FROM
@MyTable1 x
JOIN @MyTable2 y
ON x.LandId = y.LandId
AND (x.BLOCK = y.BLOCK OR (x.block IS NULL AND y.BLOCK IS NULL))
AND x.FLOOR = y.FLOOR
AND x.UNIT = y.UNIT
-- I want to achived table
1 1 北翼 North Wing 2/F B 4011177 4082800 14793
2 1 北翼 North Wing 2/F C 5611194 6562800 18230
3 1 北翼 North Wing 2/F D 4357460 4586800 18130
4 1 北翼 North Wing 3/F B 3374514 3946800 14950
5 1 北翼 North Wing 3/F C 4863924 5688800 14662
6 1 北翼 North Wing 3/F D 3373659 3945800 14723
7 1 北翼 North Wing 3/F E 4602343 5153800 16106
8 1 北翼 North Wing 5/F B 3409569 4153800 15050
9 1 北翼 North Wing 5/F C 5134571 6770800 13989
10 1 北翼 North Wing 5/F D 3409569 7769800 14688
11 1 北翼 North Wing 5/F E 4125204 4836800 13252
12 1 北翼 North Wing 6/F B 3598611 4196800 15261
13 1 北翼 North Wing 6/F C 5189044 6840800 14134
14 1 北翼 North Wing 6/F D 3444624 7849800 14839
15 1 北翼 North Wing 6/F E 4669060 4914800 13728
16 1 帝滙豪庭 Wellesley 15 C 27353000 39905000 23000
17 1 帝滙豪庭 Wellesley 15 B 28414000 28414000 24100
18 1 帝滙豪庭 Wellesley 15 A 25556000 25556000 22100
答案 0 :(得分:0)
UPDATE x SET
x.Block = (case when y.Block is null then N'帝滙豪庭 Wellesley'else x.block end) ,
x.SalePrice = y.SalePrice,
x.ActualSize = y.ActualSize FROM @MyTable1 x JOIN @MyTable2 y
ON x.Id = y.Id
您好,
我使用了一个case语句,它会将@ table1中的值更改为帝汇豪庭Wellesley,如果为null,则保持块名称相同。
我已经在id上加了表而不是landId。
希望这有帮助