【问题标题】:SQL Server Time Series - a basic transformationSQL Server 时间序列 - 基本转换
【发布时间】:2015-01-30 17:02:32
【问题描述】:

我使用的是 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 进行数据预测的文章,但没有一篇关于这些基本内容的文章。

一种直接的方法是将这个表与每个参数(/列)本身连接起来,但我有数百个不同的参数,这种方法在我的情况下肯定行不通。

非常感谢任何帮助!

【问题讨论】:

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 2014-04-14
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多