2015-09-01 27 views
0

我有一个整数列,其中我需要添加一个case语句以显示在报表中。如果INT柱= -1,在该列中的数据应该是DOWN否则int值/ 100CASE语句失败,数据转换错误

如果我试图像下面

CASE WHEN LOADVALUE = -1 then 'DOWN' 

ELSE LOADVALUE/100 END 

如所预期的,我收到一个错误:错误转换varchar为int。请帮忙。

回答

2

当您使用case请确认,when子句和else子句中的数据类型是一致的。

CASE WHEN LOADVALUE = -1 then 'DOWN' 
ELSE cast(LOADVALUE/100 as varchar) END 
3

你需要投你ELSE结果为VARCHAR

CASE WHEN LOADVALUE = -1 THEN 'DOWN' 
ELSE CONVERT(VARCHAR (10), LOADVALUE/100) END 

有些事情,你应该记住,虽然,是因为LOADVALUE的数据类型是INT,你可能会由于意外的结果整数除法。您可能需要考虑使用这个代替:

CASE WHEN LOADVALUE = -1 THEN 'DOWN' 
ELSE CONVERT(VARCHAR (10), (LOADVALUE * 1.0)/100.0) END 

这将LOADVALUE转换为十进制做正确的划分。
(如果你实际上想要整数除法,请不用这个选择)

+0

我不相信你需要* 1.0位。但如果您想要Siyual建议的非整数结果,您肯定需要/ 100.0位。如果你真的担心,那么你可以简单地做(LOADVALUE * 0.1) –