2016-05-12 53 views
0

我正在使用此存储过程从SQL数据库检索数据。有些数据点不好用-9999或9999表示,我想清除不良数据并用空值替换。有没有办法在这个存储过程中做到这一点?需要将SQL数据更改为存储过程内的NULL

SELECT * 
FROM (
    SELECT CAST(DateTimeUTC as SmallDateTime) as [DateTime], DataValue, VariableID 
    FROM DataValues 
    WHERE SiteID = 3 and VariableID IN (1,2,4,6,7,8,9,10,11) 
    ) TableDate 
PIVOT (SUM(DataValue) FOR VariableID IN ([1],[2],[4],[6],[7],[8],[9],[10],[11])) PivotTable ORDER BY [DateTime] 
+0

你能提供的数据和你想要的结果的样本? –

回答

0

如果你想验证DataValue有很多选项。如果只有两个可能的错误值,可以使用case语句。如果还有更多,你可以考虑一个你可以加入的“控制表”。

没有示例数据很难确定这会起作用,但我认为这是您要做的。

SELECT * 
    FROM (
     SELECT CAST(DateTimeUTC as SmallDateTime) as [DateTime], 
      CASE When DataValue = '-9999' Then null 
       When DataValue = '9999' Then null 
       Else DataValue 
       End DataValue, VariableID 
      FROM DataValues 
      WHERE SiteID = 3 and VariableID IN (1,2,4,6,7,8,9,10,11) 
     ) TableDate 
    PIVOT (SUM(DataValue) FOR VariableID IN ([1],[2],[4],[6],[7],[8],[9],[10],[11])) PivotTable ORDER BY [DateTime] 
0

案例工作正常。作为另一种选择,我会建议你使用NULLIF函数

DataValue = NULLIF(NULLIF(DataValue, '-9999'), '9999')