Временной ряд 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
Другие вопросы по тегам