2017-07-18 7 views
0

2つのテーブルが1行あたりのデータが非常に異なっていることがわかりました。今私はちょうど彼らが正しく更新することができますかと思っています。私はLIKEまたはCONTAINSを使用しようとしましたが、データは厳密に異なる単語またはデータであるため、実装する方法はわかりません。うまくいけば、あなたは私を助けることができます。どうもありがとうございます。T-SQLで2つのテーブルを正しく更新する方法は?

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 

こんにちは、

  1. 私は、同じブロック名を維持し、他の場合はnull豪庭滙ウェルズリーを帝ために、@を表1に値を変更しますcase文を使用しています。

  2. 私はlandIdではなくidにテーブルを結合しました。

希望これは、2つのテーブルのそれぞれを更新するにはどうすればよい

関連する問題