2015-08-19 36 views
0

当我插入以下到我的查询我得到一个错误如何解决此数据类型错误?

,max(case when patins.rank = 1.0 then CLAIMS.[TOTALPAID] else '' end) 

TotalPaid是包含,例如现场:445.45

我收到的消息是:

错误转换数据类型为varchar到数字

,但是,这种情况下,语句的工作:

,max(case when patins.rank = 1.0 then INSCOMP.ORG else '' end) 

Inscomp.Org只是给保险公司。

+0

什么是数据类型TOTALPAID列? – dcp1986

+0

,max(patins.rank = 1.0的情况下,然后CLAIMS。[TOTALPAID] else 0 end) – Helio

回答

1

问题:

字段TOTALPAID是数字。 Case语句可以返回的值,其值为数据类型。如果满足条件,则试图返回数字值,否则返回varchar值。那就是问题所在。

解决方案:

  1. 你可以施放场相匹配,如果你愿意,你可以返回NULL其他

    max(case when patins.rank = 1.0 then CAST(CLAIMS.[TOTALPAID] as varchar(max)) else '' end) 
    
  2. 的类型。不会有任何问题。

    max(case when patins.rank = 1.0 then CLAIMS.[TOTALPAID] else NULL end) 
    
  3. 或者只是删除了 “其他” 部分

    max(case when patins.rank = 1.0 then CLAIMS.[TOTALPAID] end) 
    

    如果条件不满足,它会返回NULL。

+0

很容易...谢谢 –

+0

@JasonClark:很高兴我能帮忙,我的朋友 –

1

case表达式的所有分支必须返回相同的数据类型。所以你不能让它们中的一个返回totalpaid,这是一个数字列,另一个返回'',它是一个字符串文字。相反,你可以返回一个实际null

max(case when patins.rank = 1.0 then CLAIMS.[TOTALPAID] else null end) 

实际上,因为case表达式的默认返回值是null无论如何,你可能只是省略else条款:

max(case when patins.rank = 1.0 then CLAIMS.[TOTALPAID] end)