I assume you have some type of id in the main row. Otherwise, it's difficult to return the values in the same order in which they appear in the original columns.
drop table mytable
create table mytable (
id int,
col1 int,
col2 int,
col3 int,
col4 int
)
insert into mytable(id, col1, col2, col3, col4) select 101, 10,2,10,50
insert into mytable(id, col1, col2, col3, col4) select 102, 20,6,30,20
insert into mytable(id, col1, col2, col3, col4) select 103, 6,15,14,80
SELECT
ca1.id,
MAX(CASE WHEN ca1.row_num = 01 THEN ca1.col END) AS col1,
MAX(CASE WHEN ca1.row_num = 02 THEN ca1.col END) AS col2,
MAX(CASE WHEN ca1.row_num = 03 THEN ca1.col END) AS col3,
MAX(CASE WHEN ca1.row_num = 04 THEN ca1.col END) AS col4
--...and so on for additional columns
FROM mytable
CROSS APPLY (
SELECT id, col, ROW_NUMBER() OVER(ORDER BY col#) AS row_num
FROM (
SELECT all_cols.id, all_cols.col, all_cols.col#,
ROW_NUMBER() OVER(PARTITION BY all_cols.col ORDER BY all_cols.col#) AS row_num
FROM (
VALUES(id, 01, col1),(id, 02, col2),(id, 03, col3),(id, 04, col4) --,...and so on for additional columns
) AS all_cols(id, col#, col)
) AS derived
WHERE row_num = 1
) AS ca1
GROUP BY ca1.id