Если количество столбцов не слишком велико, вы можете использовать оператор UNION, чтобы преобразовать его в нужный формат:
;with cte as
(select 1 as ObjektID,'O1' as Name,1 as ID1,2.3 as ID2,0.002 as ID3 UNION
select 2 as ObjektID,'O2' as Name,2 as ID1,3.4 as ID2,0.004 as ID3 UNION
select 3 as ObjektID,'O3' as Name,1 as ID1,2.1 as ID2,0.200 as ID3)
select row_number() over(order by Objektid,Name,ColName) as PK_ID,
a.*
from
(select ObjektID,Name,'ID1' as ColName,ID1 as Value from cte
UNION
select ObjektID,Name,'ID2' as ColName,ID2 as Value from cte
UNION
select ObjektID,Name,'ID3' as ColName,ID3 as Value from cte) a
Надеюсь, это поможет.
Редактировать: еще один способ сделать это будет с помощью UNPIVOT:
SELECT row_number() over(order by ObjektId,ColumnName) as PK_ID,
ObjektID, name, ColumnName, Value
FROM
(select ObjektID,Name,ID1,ID2,ID3 from cte) p
UNPIVOT
(Value FOR ColumnName IN
(ID1, ID2, ID3)) as unpvt;