У меня есть CTE, который генерирует данные в переменное количество строк. Это почасовые значения, которые мне нужно использовать при соединении с другой таблицей, но эта часть здесь не важна.
Одна часть CTE выглядит так:
DECLARE @interval INT = 3 -- hours
DECLARE @period INT = 24 -- hours
;WITH cteHour AS (
SELECT CAST('i0' AS VARCHAR(6)) AS fieldname, 0 AS i, 0 AS startpos
UNION ALL
SELECT CONCAT('i', CAST(i + 1 AS VARCHAR(5))) AS fieldname, i + 1 AS i, startpos + @interval AS startpos
FROM cteHour
WHERE (startpos + @interval) < @period
) SELECT fieldname, startpos FROM cteHour
И генерирует такие данные (в зависимости от значений @interval
и @period
):
fieldname startpos
--------- -----------
i0 0
i1 3
i2 6
i3 9
i4 12
i5 15
i6 18
i7 21
У меня вопрос, как я могу получить результаты в столбцы вместо строк, используя первый столбец в качестве имен полей, например:
i0 i1 i2 i3 i4 i5 i6 i7
-- -- -- -- -- -- -- --
0 3 6 9 12 15 18 21
Я предполагаю, что для этого потребуется PIVOT
, но, насколько я знаю, поворот не может генерировать имена полей динамически. Так что я открыт для любых ответов, которые выполнили работу.