One way would be using case
and apply
Create table #temp (ProductCode varchar(20), YTMAch int, YTMTg int, MTDTg int, YTDPer int, MTDPer int)
Insert into #temp values
('PrimaxX' , 1, 2 , 3, 4, 5),
('SuperGrip', 1, 2 , 3, 4, 5),
('WC' , 1, 2 , 3, 4, 5),
('WP' , 1, 2 , 3, 4, 5)
Select id,
max(case when ProductCode = 'PrimaxX' then value end) PrimaxX,
max(case when ProductCode = 'SuperGrip' then value end) SuperGrip,
max(case when ProductCode = 'WC' then value end) WC,
max(case when ProductCode = 'WP' then value end) WP
from
(Select * from #temp cross apply (values ('YTMAch',YTMAch),
('YTMTg',YTMTg),
('MTDTg',MTDTg),
('YTDPer',YTDPer),
('MTDPer',MTDPer))v(id,value))c
group by id