表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]
以上查询引发错误
返回440万条记录后。将数据类型varchar转换为float时出错。
我可以在代码中更改哪些内容以消除错误?我正在使用SQL Server。
答案 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
。