Вы можете использовать своего рода динамический c запрос, выполнив оператор SQL из строковой переменной
концепция примерно следующая:
сначала объявите переменную
DECLARE @pivotcolumns NVARCHAR(MAX) = '',
@sqlquery NVARCHAR(MAX) = '';
получить все mode_code и сохранить их в переменной @ pivotcolumns
SELECT
@pivotcolumns+=QUOTENAME(mode_code) + ','
FROM
the_table
ORDER BY
mode_code;
SET @pivotcolumns = LEFT(@pivotcolumns, LEN(@pivotcolumns) - 1);
, если мы напечатаем @pivotcolumns, он станет чем-то вроде '0','1','2','...'
после того, как вы получите все столбцы, проанализируйте их в строку для SQL запроса
SET @sqlquery ='
SELECT * FROM (
select mode_code, time_spent
from the_table) t
PIVOT(
SUM(time_spent)
FOR mode_code IN ('+ @pivotcolumns +')
) AS pivot_table;';
После того, как вы завершите sh создание строки запроса SQL, мы можем выполнить его с помощью sp execute SQL
EXECUTE sp_executesql @sqlquery;