Please check the SQL snippet below and also the attached image for before and after snapshots of the data. I hope it helps.
-- Table1 has just MyID...rest of the columns all have NULL values
DECLARE @Table1 TABLE (MyID INT, ID1 INT, ID2 INT, ID3 INT, ID4 INT)
INSERT @Table1 (MyID, ID1, ID2, ID3, ID4) VALUES (1, NULL, NULL, NULL, NULL), (2, NULL, NULL, NULL, NULL), (3, NULL, NULL, NULL, NULL), (4, NULL, NULL, NULL, NULL)
SELECT * FROM @Table1
-- Table2 has multiple values for MyID; each MyID has multiple ColumnNames (a max of 4, from ID1 thru ID4) and corresponding ColumnValues
DECLARE @Table2 TABLE (MyID INT, ColumnName VARCHAR (10), ColumnValue INT)
INSERT @Table2 VALUES (1, 'ID1', 10), (1, 'ID2', 20), (1, 'ID3', 30), (1, 'ID4', 40), (2, 'ID1', 101), (2, 'ID2', 102), (2, 'ID3', 103), (3, 'ID1', 1001), (3, 'ID3', 1003), (4, 'ID1', 111), (4, 'ID2', 222), (4, 'ID3', 333), (4, 'ID4', 444)
SELECT * FROM @Table2
-- Update Table1 by PIVOTing Table2 to match the structure
UPDATE@Table1
SETt1.ID1 = pvt.ID1,
t1.ID2 = pvt.ID2,
t1.ID3 = pvt.ID3,
t1.ID4 = pvt.ID4
FROM@Table1 t1
INNER JOIN (
SELECT*
FROM@Table2
PIVOT
(AVG(ColumnValue) FOR ColumnName IN ([ID1], [ID2], [ID3], [ID4])
) AS MyVal
) pvt
ON t1.MyID = pvt.MyID
SELECT * FROM @Table1
- RexHelios