2012-09-17 36 views
0

我正在构建一个文件,使用SSMS,它将作为机器学习程序的输入。输出文件将是SQL Server 2008 R2 Express数据库中多个表的查询结果。用二进制列处理SQL Server中的缺失值

查询结果中的一些单元格的值为NULL。目前,我在使用ISNULL()函数在存在NULL值时插入'0.00',但这只是一个临时度量,因为某些值实际上是'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.001如果它实际上是0.00由于NULL值。

我想看到的:

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 
...    ...      ...    ...   ... 

如何做到这一点有什么建议?

回答

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 ... 
1

您可以添加一个商店程序来根据另一个rowvalue分配一个值。但是这是在数据库方面,不知道这是你想要的。

1

survRRNAperRRNA应该是三态:NULL,0.00,别的。

您可以在SELECT使用CASE语句这些新列,以实现这一目标:

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