Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算绝对和时将数据类型varchar转换为浮点时出错_Sql_Sql Server_Group By_Sum_Na - Fatal编程技术网

Sql 计算绝对和时将数据类型varchar转换为浮点时出错

Sql 计算绝对和时将数据类型varchar转换为浮点时出错,sql,sql-server,group-by,sum,na,Sql,Sql Server,Group By,Sum,Na,表MTEL有700万行[TRANSACTION\u AMT]列是varchar,有些值是数字,有些值是空格,有些是'NA'。由于我在[TRANSACTION\u AMT]列返回绝对和,所以我使用了以下查询- select e.[ ACCOUNT_NUM] as acct_num ,'MTL' as src ,case when isnumeric([TRANSACTION_AMT]) = 1 then SUM(ABS([TRANSACTION_AMT

MTEL
有700万行
[TRANSACTION\u AMT]
列是
varchar
,有些值是数字,有些值是空格,有些是
'NA'
。由于我在
[TRANSACTION\u 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。

您在
sum()之后执行数字逻辑。
。您需要在
sum()中执行此操作。

而且,您可能不希望
e.[TRANSACTION\u AMT]
分组中


我还简化了逻辑,因此您只需添加有效的数值。它把其他一切都当作
0

谢谢你,戈登侦探!向你致敬!
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];