SQL Pivot表-过滤器时间戳

时间:2018-08-05 06:03:40

标签: sql pivot-table

我有一个带有时间戳,标记名和标记值字段的记录器表。 每当标签值更改时,控制系统就会使用这3个参数将记录写入表中。 记录的时间戳未同步。 我想运行数据透视表查询以获取3个不同标签的所有数据,以仅显示这3个标签的值。 当我在下面运行查询时,我返回一个数据集,该数据集的表中包含所有时间戳记录,而值字段中包含许多空值(SQL返回所有时间戳值)。 我使用查询:

SELECT * 
FROM (
      SELECT [timestamp],
             [_VAL] AS '_VAL',
             [point_id] 
      FROM DATA_LOG) p 
      PIVOT(SUM([_VAL]) FOR point_id in ([GG02.PV_CURNT],
                                         [GG02.PV_JACKT],
                                         [GG02.PV_SPEED],
                                         [GG02.PV_TEMP])
      ) as tagvalue 
ORDER BY timestamp ASC

以下是我从SQL Server返回的值的示例:

结果示例:

enter image description here

请有人能帮助我如何限制SQL仅针对与这3个标记相关的时间戳而不是与表中的所有时间戳值相关的时间戳返回我的时间戳吗? (当至少一个标签值不为null时,返回值列表将包含一条记录) 如果有人有其他想法,并且不使用PIVOT查询来获取上面显示的格式的数据,则欢迎任何想法。

1 个答案:

答案 0 :(得分:0)

我想你只是想要

WHERE [GG02.PV_CURNT] IS NOT NULL OR
      [GG02.PV_JACKT] IS NOT NULL OR
      [GG02.PV_SPEED] IS NOT NULL OR
      [GG02.PV_TEMP] IS NOT NULL

在子查询中。