SQL 服务器时间序列 - 基本转换
SQL Server Time Series - a basic transformation
我正在使用 SQL Server 2008
我有一个 table 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
现在我想编写一个查询将此时间序列数据转换为以下 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
我正在使用 SQL Server 2008
我有一个 table 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
现在我想编写一个查询将此时间序列数据转换为以下 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