我一直在“收购”表中找到债券的原始余额,用于个人“绩效”季度。它适用于每个季度,但当我试图在2010Q1上运行我的查询时,我收到了此通知:
Msg 245, Level 16, State 1, Line 2
Conversion failed when converting the varchar value 'N' to data type int.
我的查询是:
SELECT ALL a.[LOAN IDENTIFIER]
,[CHANNEL]
,[SELLER NAME]
,[ORIGINAL INTEREST RATE]
,[ORIGINAL UNPAID PRINCIPAL BALANCE (UPB)]
,[ORIGINAL LOAN TERM]
,[ORIGINATION DATE]
,[FIRST PAYMENT DATE]
,[ORIGINAL LOAN-TO-VALUE (LTV)]
,[ORIGINAL COMBINED LOAN-TO-VALUE (CLTV)]
,[NUMBER OF BORROWERS]
,[ORIGINAL DEBT-TO-INCOME RATIO]
,[CREDIT SCORE]
,[FIRST-TIME HOME BUYER INDICATOR]
,[LOAN PURPOSE]
,[PROPERTY TYPE]
,[NUMBER OF UNITS]
,[OCCUPANCY STATUS]
,[PROPERTY STATE]
,[ZIP (3-DIGIT)]
,[MORTGAGE INSURANCE PERCENTAGE]
,[PRODUCT TYPE]
FROM dbo.Performance_2010Q1 a join dbo.TotalAcquisition b on a.[Loan Identifier] = b.[LOAN IDENTIFIER]
Where a.[Zero Balance Code] = 97 or a.[Zero Balance Code] = 03
零余额代码告诉债券违约是怎样的,我根据每个债券“贷款标识符”在两个表之间进行匹配
谢谢! :-D
答案 0 :(得分:2)
由于您在字段列表中没有显式转换,因此它必须是ON
或WHERE
子句中的隐式转换。
要导致转化的ON
子句,贷款标识符必须在一个中定义为nvarchar
,在另一个中定义为int
表。这不太可能(虽然不是不可能; - )
所以我怀疑你的WHERE
条款。 IF 零余额代码定义为nvarchar
,并且您正在与int
(97或3)进行比较,这将导致隐式转换。如果您的表中只有一个包含字符的条目,则此隐式转换将失败。
避免这种情况的一种方法是使用字符串定义WHERE
子句(例如WHERE A.[Zero Balance Code] = '97'
,'03'
相同)。一种稍微优雅的方法是使用ISNUMERIC检查数字数据。因为您如何知道余额代码始终为'03'
,而不仅仅是'3'
?这些条目将被过滤掉,因为'3'
不等于'03'
...
但要小心:
这可能忽略了真正的问题。
这里的一个重要问题是,为什么你的表中会突然出现非数字数据!你需要检查一下你是否以某种方式将损坏的数据输入到你的系统中。
答案 1 :(得分:1)
。[零余额代码]中是否有值无法转换为int?
试试这个问题:
Where a.[Zero Balance Code] = '97' or a.[Zero Balance Code] = '03'