2014-04-17 5 views
0

MTEL에는 700 만 개의 행이 있습니다. [TRANSACTION_AMT] 열은 varchar이고 일부 값은 숫자이며 일부 값은 공백이며 일부는 'NA'입니다. I 열 [TRANSACTION_AMT]의 절대 합을 복귀하고 있기 때문에, I는 다음 질의를 사용한 -절대 값을 계산하는 동안 varchar를 float로 변환하는 중 오류가 발생했습니다.

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 형을 던진다.

440 만 건의 레코드를 반환 한 후

코드에서 오류를 제거하기 위해 변경할 수있는 항목은 무엇입니까? SQL Server를 사용하고 있습니다.

답변

0

sum() 다음에 숫자 논리 을 수행하고 있습니다. 당신은 아마 group by에서 e.[ TRANSACTION_AMT]을 원하지 않는,

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]; 

을 그리고 : 당신은 sum() 내부에 그것을 할 필요가있다.

또한 로직을 단순화하여 유효한 숫자 값만 합산했습니다. 다른 모든 것을 0으로 처리합니다.

+0

고든 형사 고든 형사! 너 한테 모자 벗어! –

관련 문제