SQL - 如果第一个选择行返回空,则选择另一行

时间:2014-09-08 18:19:54

标签: sql sql-server sql-server-2008 jdbc

我正在使用 SQL服务器。 我有下表

Name   Number
A      123
B      456
C      789
D      000

我有两个名字。我想编写一个sql语句,以便我可以选择检查表中是否存在第一个给定的名称。

  • 如果是,则sql返回具有名字的行。
  • 如果没有,它会检查第二个名字。如果找到具有第二个名称的行,则 返回那一行。
  • 如果找不到两个名字,则返回空白

例如,

  • 如果给出“A”,“C”,则sql语句应该返回行 仅命名为“A”。
  • 如果给出'G','B',它应首先检查'G'但未找到,然后返回名称为'B'的行,因为找到了它。
  • 如果给出'X','Y',那么它应该返回空行

实现它的最有效但通用的SQL语句是什么? (我的意思是“泛型”是我想写一个适合大多数Retional SQL DB而不仅仅是SQL服务器的sql语句)

提前致谢!

更新 我的意思是说“空行”时返回“无行”。我为错误的措辞道歉。

2 个答案:

答案 0 :(得分:5)

select top 1 number from (

select 1 pos, number where name =@a
union all
select 2, number where name= @b)
order by pos

答案 1 :(得分:4)

您可以在没有union all的情况下执行此操作:

select top 1 t.*
from table t
where name in (@name1, @name2)
order by (case when name = @name1 then 1 else 0 end) desc;