SQL Server时间序列 - 一个基本的转换

时间:2015-01-30 17:02:33

标签: sql-server sql-server-2008 dmx-ssas

我正在使用SQL Server 2008

我的表格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

现在我想写一个查询来将这个时间序列数据转换成下表,每个参数都有一个单独的列:

Date, Temperature, SnowLevel, Humidity 

包含以下数据:

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

我知道SQL Server有很多用于处理时间序列的功能,但我找不到任何可以进行此转换的基本功能。我在DMX上发现了数十篇关于数据预测的文章,但没有关于这个基本内容的文章。

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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