使用二进制列处理SQL Server中的缺失值

时间:2012-09-17 18:00:03

标签: sql sql-server

我正在使用SSMS构建一个文件,它将成为机器学习程序的输入。输出文件将是SQL Server 2008 R2 Express DB中几个表的查询结果。

查询会导致某些单元格的NULL值。目前我正在使用ISNULL()函数在'0.00'值时插入NULL,但这只是一个临时措施,因为某些值实际为'0.00'并且这会使计算

原始数据如下:

  id        surveyResponseRate      personResponseRate
 001            .068                      .15
 002            0.00                     NULL
 003            .014                      .03
 004            NULL                      .20
 005            .068                     0.00
 ...             ...                      ...

当前流程创建的内容:

 id        surveyResponseRate      personResponseRate
 001            .068                      .15
 002            0.00                     0.00
 003            .014                      .03
 004            0.00                      .20
 005            .068                     0.00
 ...             ...                      ...

我很好奇是否有办法创建二进制列,如果值实际为0则为0.00,如果1实际为0.00则为NULL {1}}值。

我想看到的内容:

 id        surveyResponseRate      personResponseRate  survRRNA      perRRNA
 001            .068                      .15              0            0
 002            0.00                     0.00              0            1
 003            .014                      .03              0            0
 004            0.00                      .20              1            0
 005            .068                     0.00              0            0
 ...             ...                      ...             ...          ...

有关如何执行此操作的任何建议吗?

3 个答案:

答案 0 :(得分:1)

您可以添加商店过程以根据其他行值分配值。但这是在数据库方面,不知道这是否是你想要的。

答案 1 :(得分:1)

survRRNAperRRNA应该是三态:NULL,0.00,其他。

您可以在CASE中使用SELECT语句来获取这些新列:

CASE 
    WHEN surveyResponseRate IS NULL then 1
    WHEN surveyResponseRate = 0.00 then 0
    ELSE -1
END as 'survRRNA'

答案 2 :(得分:1)

只需将新列的表达式添加到SELECT子句中,如下所示:

SELECT
  id,
  ISNULL(surveyResponseRate, 0) AS surveyResponseRate,
  ISNULL(personResponseRate, 0) AS personResponseRate,
  CASE WHEN surveyResponseRate IS NULL THEN 1 ELSE 0 END AS survRRNA,
  CASE WHEN personResponseRate IS NULL THEN 1 ELSE 0 END AS perRRNA
FROM ...