2014-02-06 19 views
0

我有一個要求,用DEL填寫所有NULL字段。我不想修改數據庫表,我只想在列上做。以下是我現在想要做的。基本上,如果該值不爲空,那麼我想要132.00。如果它爲空,那麼我想看到DEL。我正在研究SQL 2008 R2。感謝您的幫助,非常感謝。SQL在同一列中使用文本和小數位

當前思想

CASE WHEN [Sales] IS NOT NULL 
    THEN CAST([Sales] AS decimal(10,0)) 
    ELSE 'DEL' 
END AS Sales 

錯誤

錯誤數據類型爲varchar轉換爲數字。

Warning: Null value is eliminated by an aggregate or other SET operation. 
+0

Sales列的類型是什麼?而DEL是一個列或一個字符串值? –

+1

銷售是Int,DEL是一個字符串 – user2100632

回答

1
CASE WHEN [Sales] IS NOT NULL 
    THEN CAST(CAST([Sales] AS decimal(10,0)) AS NVARCHAR(1000)) 
    ELSE CAST(DEL AS NVARCHAR(1000)) 
END AS Sales 

在一個case語句中的每個緩解返回的數據類型必須相同。

編輯

要返回字符串DEL如果銷售額爲空,你可以做

CASE WHEN [Sales] IS NOT NULL 
    THEN CAST(CAST([Sales] AS decimal(10,0)) AS NVARCHAR(1000)) 
    ELSE 'DEL' 
END AS Sales 
+0

DEL是不是一個列,因爲我問它的意見,它是一個字符串。 –

+0

如果銷售額爲空,您是否返回字符串「DEL」? –

+0

是的我試圖返回'DEL',如果它爲空。對不起,我錯過了上面的問題。 – user2100632

1

你不能一列中的「DEL」文本定義爲持有小數。這是不可能的。更何況,你不應該存儲十六進制值在一個柱狀定義來保存字符串。換句話說,這個要求是倒退和錯誤的。

你可以做的是繼續存儲NULL和十進制數據與往常一樣,只是返回字符串數據顯示:

CASE WHEN [sales] IS NULL THEN 'DEL' ELSE Convert(varchar(13), [sales]) END 

然而,這也比不太理想,因爲它迫使你數據庫來完成轉換工作,並且意味着您的客戶端代碼開始使用字符串而不是數字。這裏最好的選擇是讓數據庫繼續使用原始數據,並在您的客戶端代碼中進行調整以將NULL更改爲'DEL'。

相關問題