SQL 服务器时间序列 - 基本转换

SQL Server Time Series - a basic transformation

我正在使用 SQL Server 2008

我有一个 table MainTable,其中包含 3 列 DateParameterValue

示例数据:

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

现在我想编写一个查询将此时间序列数据转换为以下 table 每个参数都有一个单独的列:

Date, Temperature, SnowLevel, Humidity 

具有以下数据:

Date          Temperature      SnowLevel     Humidity 
------------+----------------+-------------+----------
01-Jan-2010 |     30         |      2      |    60
02-Jan-2010 |     32         |      5      |    NULL

我知道 SQL 服务器有很多处理时间序列的功能,但我找不到任何可以进行这种转换的基本功能。我找到了数十篇关于使用 DMX 进行数据预测的文章,但没有一篇是关于这些基本内容的。

一种直接的方法是为每个参数(/列)将此 table 与其本身连接起来,但我有数百个不同的参数,而且这种方法肯定不适用于我的情况。

非常感谢任何帮助!

您想要的通常可以使用 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