我正在尝试运行查询,其中下面的CASE语句是其中一行。我正在使用Report Builder 3.0。
但是,我收到一条错误消息:
将varchar值'Case 1'转换为数据类型int时转换失败; Microsoft SQL Server,错误:245“。
为什么CASE语句要求THEN部分是INT数据类型?
(CASE
WHEN jobs.Uf_Production_Line = 'LN BM6'
THEN 'Case 1'
ELSE
99999
END
) AS line
答案 0 :(得分:5)
使用CASE
语句时,所有结果表达式必须具有相同的数据类型。如果不是,则结果将转换为具有更高优先级的数据类型。根据{{3}}
从中输入类型集中的最高优先级类型 result_expressions和可选的else_result_expression。
由于INT
的{{3}}高于VARCHAR
,因此您的查询会产生错误:
将varchar值'Case 1'转换为数据时转换失败 type int; Microsoft SQL Server,错误:245“。
要解决此问题,您应该将ELSE
部分转换为VARCHAR
。
ELSE '99999'
答案 1 :(得分:3)
由于您的else
使用数据类型为int
的值:
ELSE 99999
您使用无法自动交换的数据类型(varchar
和int
)。
选项是使用:
ELSE '99999'
答案 2 :(得分:0)
case语句只能返回一种数据类型。所以使用数字作为varchar:
(CASE WHEN jobs.Uf_Production_Line = 'LN BM6'
THEN 'Case 1'
ELSE '99999'
END
) AS line
或如果您想将其表示为NULL
的无效值,则可以返回Line
而不是9999:
(CASE WHEN jobs.Uf_Production_Line = 'LN BM6'
THEN 'Case 1'
ELSE NULL
END
) AS line
答案 3 :(得分:0)
因为 99999 是int
。两种情况都必须返回相同的数据类型。
答案 4 :(得分:0)
您应该使用'99999'
代替99999
。 CASE
中的所有值都应该是相同的数据类型,现在ELSE
部分值为INT
数据类型。
完整代码应该是:
(CASE WHEN jobs.Uf_Production_Line = 'LN BM6' THEN 'Case 1'
ELSE '99999'
END
) AS line