Если ваши indexcodes
фиксированные (1-6), в этом случае вы можете использовать следующий запрос PIVOT.
SELECT *
FROM TABLE_NAME
PIVOT ( Max(grade)
FOR indexcode IN ( [1], [2], [3],[4],[5],[6]) ) pvt
Если ваши значения кода индекса не фиксированы и могут принимать любое значение, в этомВ этом случае вы можете перейти к динамическому повороту, как показано ниже.
DECLARE @cols AS NVARCHAR(max) = Stuff((SELECT DISTINCT ', ' + Quotename(indexcode)
FROM TABLE_NAME
FOR xml path(''), type).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
DECLARE @query AS NVARCHAR(max) = ' SELECT *
FROM TABLE_NAME
PIVOT ( max(grade)
FOR indexcode IN ('+@cols+') ) pvt';
EXECUTE(@query)
DEMO