SQL子查询Case语句

时间:2018-05-18 18:32:26

标签: sql

我正在研究以下SQL:

select a.field1 a.field2 b.field3

(select FIELD from table3 where KEY = a.field1) as field4

from TAB1 a inner join TAB2 b on a.key = b.key.

如果在field4中有一个条目'N / A',我的要求是FIELD FROM table3的显示值。我正在尝试以下内容并收到错误“此SELECT语句不允许使用NTO子句:此处不允许使用子查询”

关于如何实现这一目标的任何指示...

select a.field1 a.field2 b.field3 
case when (select FIELD into lv_value from TABLE3 where TABLE3.KEY = a.key) is null then 'N/A'
else.
lv_value
end as field4 
from TAB1 a inner join TAB2 b on TAB1.KEY = TAB2.KEY.

2 个答案:

答案 0 :(得分:0)

你不能这样做,你可以通过标准函数coalesce()直接表达它:

select a.field1 a.field2 b.field3
       coalesce( (select t3.FIELD 
                  from table3 t3
                  where t3.KEY = a.field1
                  ), 'N/A'
               ) as field4
from TAB1 a 
inner join TAB2 b on a.key = b.key;

请注意,如果您有单个密钥的更多记录,则会出现subquery错误,如果是,请使用LIMIT子句或TOP以您的为准DBMS 支持适当的order by子句。

答案 1 :(得分:0)

您应该使用查询加入TABLE3,而不是使用左连接加入子查询。并且您可以使用ISNULL函数 - 如果您使用的是SQL Server - 使用它,结果应该是这样的;

select a.field1, a.field2, b.field3, ISNULL(c.lv_value , 'N/A') as field4 
from TAB1 a inner join TAB2 b on TAB1.KEY = TAB2.KEY LEFT JOIN TABLE3 c ON c.KEY = a.KEY