【问题标题】:Error converting data type varchar to float while calculating absolute sum计算绝对和时将数据类型 varchar 转换为浮点数时出错
【发布时间】:2014-04-17 15:20:56
【问题描述】:

MTEL 有700 万行。 [TRANSACTION_AMT] 列是 varchar,有些值是数字,而有些值是空格,有些是 'NA'。由于我在 [TRANSACTION_AMT] 列上返回绝对总和,因此我使用了以下查询 -

select  
    e.[ ACCOUNT_NUM] as acct_num
    ,'MTL' as src
    ,case 
        when isnumeric([TRANSACTION_AMT]) = 1 then SUM(ABS([TRANSACTION_AMT]))
        when [TRANSACTION_AMT] = 'NA' then SUM(ABS(REPLACE([TRANSACTION_AMT],'NA','0')))
        when [TRANSACTION_AMT] = '' then SUM(ABS(REPLACE([TRANSACTION_AMT], '', '0')))
   end as abs_total_txn_amt
from 
   mtb..MTEL e (nolock)
group by  
   e.[ACCOUNT_NUM], e.[TRANSACTION_AMT]

以上查询抛出错误

将数据类型 varchar 转换为 float 时出错。

返回 440 万条记录后。

我可以在我的代码中进行哪些更改以消除错误?我正在使用 SQL Server。

【问题讨论】:

    标签: sql sql-server group-by sum na


    【解决方案1】:

    您正在sum() 之后执行数字逻辑。你需要在sum()里面做:

    select  e.[ ACCOUNT_NUM] as acct_num, 'MTL' as src
            sum(case when isnumeric([ TRANSACTION_AMT]) = 1 then ABS([ TRANSACTION_AMT])
                     else 0
                end) as abs_total_txn_amt
    from mtb..MTEL e (nolock)
    group by  e.[ ACCOUNT_NUM];
    

    而且,您可能不希望 e.[ TRANSACTION_AMT] 出现在 group by 中。

    我还简化了逻辑,因此您只需将有效数值相加。它将其他所有内容视为0

    【讨论】:

    • 谢谢戈登警探!向你致敬!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    相关资源
    最近更新 更多