Временной ряд SQL Server - базовое преобразование
Я использую SQL Server 2008
У меня есть стол MainTable
с 3 колонками Date
, Parameter
, Value
,
Пример данных:
Date Parameter Value
-------------+--------------+-------
01-Jan-2010 | Temperature | 30
01-Jan-2010 | SnowLevel | 2
01-Jan-2010 | Humidity | 60
02-Jan-2010 | Temperature | 32
02-Jan-2010 | SnowLevel | 5
Теперь я хочу написать запрос для преобразования данных этого временного ряда в следующую таблицу, имеющую отдельный столбец для каждого параметра:
Date, Temperature, SnowLevel, Humidity
со следующими данными:
Date Temperature SnowLevel Humidity
------------+----------------+-------------+----------
01-Jan-2010 | 30 | 2 | 60
02-Jan-2010 | 32 | 5 | NULL
Я знаю, что SQL Server имеет много функциональных возможностей для работы с временными рядами, но я не смог найти никаких базовых функциональных возможностей, которые могли бы осуществить это преобразование. Я нашел десятки статей о прогнозировании данных с помощью DMX, но никто не рассказал об этом базовом материале.
Прямой подход состоит в том, чтобы объединить эту таблицу с самим собой для каждого параметра (/ столбца), но у меня есть сотни различных параметров, и, безусловно, этот подход не будет работать в моем случае.
Любая помощь очень ценится!
1 ответ
То, что вы хотите, обычно достигается с помощью PIVOT
:
SELECT [Date], [Temperature], [SnowLevel], [Humidity]
FROM (
SELECT [Date], Parameter, Value
FROM #MainTable )src
PIVOT (
MAX(Value)
FOR Parameter IN ([Temperature], [SnowLevel], [Humidity])
) pvt
Приведенный выше запрос производит следующий вывод на основе данных примера OP:
Date Temperature SnowLevel Humidity
---------------------------------------------
2010-01-01 30 2 60
2010-01-02 32 5 NULL