若SQL查询中的Then语句坚持尝试转换为错误的类型,那个么将失败

若SQL查询中的Then语句坚持尝试转换为错误的类型,那个么将失败,sql,sql-server,if-statement,Sql,Sql Server,If Statement,我有一个SQL查询,通过一个内部联接将表1链接到表2,在语句的select部分包含这一部分: select table1.field1, table2.field1, CASE (table2.field1) WHEN -2 THEN '' ELSE table2.field2 END as table2Field2, table3.field4 from... 我希望能够在table2Field2具有相关值时返回它,即:当table2中表示的对象不为null时,因此tab

我有一个SQL查询,通过一个内部联接将表1链接到表2,在语句的select部分包含这一部分:

select
table1.field1,
table2.field1,
CASE (table2.field1)
     WHEN -2 THEN ''
     ELSE table2.field2
END as table2Field2,
table3.field4
from...
我希望能够在table2Field2具有相关值时返回它,即:当table2中表示的对象不为null时,因此table2.field1的值不为-2。在这种情况下,table2Field2的值应为空,而不是无意义的值

但是,这会返回0而不是空白文本。如果我更改此行:

 WHEN -2 THEN ''
为此:

 WHEN -2 THEN 'someText'
然后它向我抱怨它试图将int转换为字符串,而我不是。table2field1是一个int,但table2Field2是一个字符串,这就是我们在这里实际返回的内容

在这个查询中,我如何声明(更具体地说)我是以字符串的形式返回字符串字段,而不是以字符串的形式返回其他内容,而不是(a)字符串和(b)我指定要返回的内容


欢迎所有建议,非常感谢您的帮助:)

您的
如table2field2
是否可能位于错误的位置

也许可以试试:

select
table1.field1,
table2.field1,
CASE (table2.field1)
     WHEN -2 THEN ''
     ELSE table2.field2
END as table2Field2,
table3.field4
from...

您的
如表2字段2
是否可能位于错误的位置

也许可以试试:

select
table1.field1,
table2.field1,
CASE (table2.field1)
     WHEN -2 THEN ''
     ELSE table2.field2
END as table2Field2,
table3.field4
from...

因为你不想回答我你使用的数据库是什么,所以我必须这样做,呵呵:

SQL Server:

Oracle


因为你不想回答我你使用的数据库是什么,所以我必须这样做,呵呵:

SQL Server:

Oracle


情况下
表达式中,所有可能的返回值必须是相同的数据类型。如前所述,表达式试图返回一个字符串和一个整数

如果希望第一次输出为空字符串,则可以将第二次输出转换为字符类型值:

select
table1.field1,
table2.field1,
CASE (table2.field1)
     WHEN -2 THEN ''
     ELSE CAST(table2.field2 AS varchar(12)) --< 12 will cover any value of integer.
END as table2Field2,
table3.field4
from...
选择
表1.1,
表2.1,
案例(表2.1)
当-2然后“
ELSE CAST(表2.field2为varchar(12))--<12将覆盖整数的任何值。
结束于表2字段2,
表3.4
从…起

情况下
表达式中,所有可能的返回值必须是相同的数据类型。如前所述,表达式试图返回一个字符串和一个整数

如果希望第一次输出为空字符串,则可以将第二次输出转换为字符类型值:

select
table1.field1,
table2.field1,
CASE (table2.field1)
     WHEN -2 THEN ''
     ELSE CAST(table2.field2 AS varchar(12)) --< 12 will cover any value of integer.
END as table2Field2,
table3.field4
from...
选择
表1.1,
表2.1,
案例(表2.1)
当-2然后“
ELSE CAST(表2.field2为varchar(12))--<12将覆盖整数的任何值。
结束于表2字段2,
表3.4
从…起

您使用什么数据库?谢谢您可以返回null吗?CASE语句希望when子句和else子句中的值都返回相同的数据类型。您正在尝试返回1个数字和其他字符串。因此出现了错误。您可以通过将其更改为WHEN'-2',然后“使用什么数据库”来解决此问题?谢谢您可以返回null吗?CASE语句希望when子句和else子句中的值都返回相同的数据类型。您正在尝试返回1个数字和其他字符串。因此出现了错误。您可能会将其更改为WHEN'-2',THEN''Good spot来解决此问题,但是的,我最初将其放在了正确的位置。我把它写出来了,而不是复制和粘贴,因为我想简化一下,以便在这个问题中发布。我现在将编辑和修改这部分:)好的地方,但是的,我本来把它放在正确的地方。我把它写出来了,而不是复制和粘贴,因为我想简化一下,以便在这个问题中发布。我现在将编辑和修改这部分:)我使用的是SQL Server,但不错。我使用的是SQL Server,但不错。