It seems that you have a poor design and that's making everyone confused. You should review what's going on here.
That said, this might help you:
CREATE TABLE SampleData(
idint,
val1varchar(50),
val2 varchar(50));
INSERT INTO SampleData
VALUES
(1,'red', NULL),
(1,'blue',NULL),
(1,'green','round'),
(1,NULL,'square');
WITH val1s AS(
SELECT id,
val1,
ROW_NUMBER() OVER(PARTITION BY id ORDER BY val1 DESC) rn
FROM SampleData
WHERE val1 IS NOT NULL
),
val2s AS(
SELECT id,
val2,
ROW_NUMBER() OVER(PARTITION BY id ORDER BY val2 DESC) rn
FROM SampleData
WHERE val2 IS NOT NULL
)
SELECT ISNULL( v1.id, v2.id) id,
v1.val1,
v2.val2
FROM val1s v1
FULL
JOIN val2s v2 ON v1.id = v2.id AND v1.rn = v2.rn
GO
DROP TABLE SampleData
Next time, please post sample data and expected results the same way I did here to prevent us from having to do additional work (we're not paid for helping).