Как повернуть столбец Numeri c в T SQL? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть таблица с такими данными:

enter image description here

Мне нужно написать запрос T- SQL, чтобы преобразовать данные в результат будет таким:

enter image description here

1 Ответ

0 голосов
/ 16 июня 2020

Вы можете использовать своего рода динамический 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;
...