2017-04-18 82 views
0

我已经写在SQL Server 2008以下联合查询选择数字新列是查询:使用联合查询

select cast(i.AMT_SETT as decimal(10,2)) as AMT_SETT 
from DIB_ERECON_INSIGHT_VISA i 

union 
select NULL as AMT_SETT from DIB_ERECON_TRAN_DETAILS d 
where d.channeltype = 'VISA' and cast(fieldno_1 as date) = '18-Apr-2017' and 
not exists(
       select 1 from DIB_ERECON_INSIGHT_VISA i 
       where i.STAN= d.fieldno_38 and replace(d.fieldno_39,':','') = i.TIME_LOC_TRAN and 
       cast(i.Amount as numeric(18,0)) = cast(d.fieldno_31 as numeric(18,0)) 
      ) 

我得到这个错误:

Error converting data type varchar to numeric. 

如果我尝试'',而不是nullAMTT_SETT列第二查询我得到同样的错误

+0

做,如果你执行'UNION'的第一个查询,你得到什么结果呢? –

+1

您的第一条select语句出错,其中一些值是字符串而不是数字 –

+0

您是否发现任何返回0且ISNUMERIC()使用的行? –

回答

1

ÿ您需要确保AMT_SETT,Amount和fieldno_31列中的所有值均为数值。您可以使用函数ISNUMERIC(yourcolumn)来检测存储在列中的所有非数值。

+0

该列是数字我检查 – user7543912

+0

它现在在sql数据库中工作正常,但是当我将它导出到excel时,会自动修剪小数是否有任何方法来阻止它?是excel或数据的问题? – user7543912

+0

你是如何做出口业务的? –

1

您的第一个select语句出错,其中一些值是字符串而不是数字,请查看数据并检查哪一行具有非数值。

您可以轻松地获得该行如下:

SELECT * FROM TABLE WHERE ISNUMERIC(ColumnName)=0