Sql 如何修复此数据类型错误?

Sql 如何修复此数据类型错误?,sql,sql-server,tsql,select,case,Sql,Sql Server,Tsql,Select,Case,当我在查询中插入以下内容时,我得到一个错误 ,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只是给了保险公司

当我在查询中插入以下内容时,我得到一个错误

,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
只是给了保险公司一些信息。

问题:

字段
TOTALPAID
是数字。Case语句可以返回相同数据类型的值。如果满足条件,则尝试返回数值;如果不满足条件,则尝试返回varchar值。这就是问题所在

解决方案:

  • 您可以强制转换一个字段以匹配另一个字段的类型

    max(case when patins.rank = 1.0 then CAST(CLAIMS.[TOTALPAID] as varchar(max)) else '' end)
    
  • 如果需要,可以返回
    NULL
    。不会有任何问题

    max(case when patins.rank = 1.0 then CLAIMS.[TOTALPAID] else NULL end)
    
  • 或者干脆去掉“else”部分

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


  • 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)
    

    TOTALPAID列的数据类型是什么?max(当patins.rank=1.0,然后声明[TOTALPAID]否则0结束时),这很简单。。。thanks@JasonClark字体很高兴我能帮忙,我的朋友
    max(case when patins.rank = 1.0 then CLAIMS.[TOTALPAID] end)