在计算绝对和时将数据类型varchar转换为float时出错

时间:2014-04-17 15:20:57

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

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。

1 个答案:

答案 0 :(得分:0)

在<{em> 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