2012-09-17 35 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'