I have a table with values
ID Son Father
----------- ---------- ----------
1 Mark Gerard
2 Gerard Ivan
3 Leo Samuel
4 Samuel Johan
5 Ivan Carles
I need to change table like this:
ID Son Father
----------- ---------- ----------
1 Mark Carles
2 Gerard Carles
3 Leo Johan
4 Samuel Johan
5 Ivan Carles
The goal is to find a major 'Father'
and update all 'Son'
records with this value. Major 'Father'
can be different.
My code is next:
DECLARE @CNT INT
DECLARE @CH_1 NVARCHAR(10)
DECLARE @CH_2 NVARCHAR(10)
CREATE TABLE #PPL (ID INT, Son NVARCHAR(10), Father NVARCHAR(10))
INSERT INTO #PPL VALUES (1, 'Mark', 'Gerard')
INSERT INTO #PPL VALUES (2, 'Gerard', 'Ivan')
INSERT INTO #PPL VALUES (3, 'Leo', 'Samuel')
INSERT INTO #PPL VALUES (4, 'Samuel', 'Johan')
INSERT INTO #PPL VALUES (5, 'Ivan', 'Carles')
SET @I = 1
SET @CNT = (SELECT COUNT(ID) FROM #PPL)
WHILE @I <= @CNT
BEGIN
SET @J = 1
WHILE @J <= @CNT
BEGIN
SET @CH_1 = (SELECT Son FROM #PPL WHERE ID = @J)
SET @CH_2 = (SELECT Father FROM #PPL WHERE ID = @J)
UPDATE #PPL SET Father = @CH_2 WHERE Father = @CH_1
SET @J = @J + 1
END;
SET @I = @I + 1
END;
SELECT * FROM #PPL
DROP TABLE #PPL
This code is working correct, but for the low number of records. How this code can be optimized?
Thanks!