我正在使用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上发现了数十篇关于数据预测的文章,但没有关于这个基本内容的文章。
直接的方法是将每个参数(/列)与此表连接起来,但是我有数百个不同的参数,这种方法肯定不适用于我的情况。
非常感谢任何帮助!
答案 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