Msg 8114,级别16,状态5,行1将数据类型varchar转换为数字时出错。
下面是我正在使用的代码以及代码中提到的字段的模式。在这背后的一些上下文中,我有一组indcode列表。我只给下面一个,但总共有350个。当我按indcode、area和ownership查询时,很可能数据不存在。因此,我为什么有英语。最后,我需要包含值suppress=1的行显示为N/a。
对于我查询的每个indcode,我都需要一个结果。结果可能是实际数据或某些文本(NULL、N/A等(。
最后是预期结果。我只给出了一个indcode的代码,但为了给这个例子一些深度,我已经包含了六个。
select
CASE
WHEN suppress = 0 then isnull (mnth1emp, 0)
ELSE 'N/A'
END as mnth1emp,
CASE
WHEN suppress = 0 THEN isnull (mnth2emp, 0)
ELSE 'N/A'
END as mnth2emp,
CASE
WHEN suppress = 0 THEN isnull (mnth3emp, 0)
ELSE 'N/A'
END as mnth3emp
from dbo.industryimport20172f
where area='000003' and indcode='21' and ownership='00'
suppress char (1)
mnth1emp numeric(9,0)
mnth2emp numeric(9,0)
mnth3emp numeric(9,0)
area char(6)
indcode char (6)
ownership char(2)
123 456 789
1 2 3
Null null null
2 3 4
3 4 5
Null Null Null
因此,首先跳出的是:
a( 当你要求在case语句中返回数字时,当你到达ELSE时,你要求一个字符串。尝试将所有字段强制转换为varchars,然后将其输入为字符串:
CASE
WHEN cast(suppress as varchar) = '0' then isnull (cast(mnth1emp as varchar), '0')
ELSE 'N/A'
END as mnth1e
您可能不需要强制抑制。
b( supress里面除了数字之外还有别的东西吗?如果是这样,您需要将零作为字符串:
CASE WHEN supress = '0' --etc.