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

SQL-如果第一个select行返回空,请选择另一行,sql,sql-server,sql-server-2008,jdbc,Sql,Sql Server,Sql Server 2008,Jdbc,我正在使用SQL server。 我有下表 Name Number A 123 B 456 C 789 D 000 我有两个名字。我想写一条sql语句,这样我就可以选择检查表中是否存在第一个给定的名称 如果是这样,sql将返回名为的行。 如果没有,它将检查第二个名称。如果找到第二个名称的行,则 返回那一行。 如果两个名称都未找到,则返回空 比如说, 如果给定了“A”、“C”,则sql语句应返回带有 仅命名“A”。 如果给定了'G','B',它应该首先

我正在使用SQL server。 我有下表

Name   Number
A      123
B      456
C      789
D      000
我有两个名字。我想写一条sql语句,这样我就可以选择检查表中是否存在第一个给定的名称

如果是这样,sql将返回名为的行。 如果没有,它将检查第二个名称。如果找到第二个名称的行,则 返回那一行。 如果两个名称都未找到,则返回空 比如说,

如果给定了“A”、“C”,则sql语句应返回带有 仅命名“A”。 如果给定了'G','B',它应该首先检查'G',但未找到,然后返回名为'B'的行,因为它已找到。 如果给定了“X”、“Y”,那么它应该返回空行 实现它最有效但最通用的SQL语句是什么?我所说的泛型的意思是,我想编写一个适合大多数类型的常规sql DB的sql语句,而不仅仅是sql server

提前谢谢

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

您可以在没有工会的情况下做到这一点:

select top 1 number from (

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

这个值是如何给出的?你如何对它们排序?如果名称按“a”、“b”的顺序按…`键入东西并扔掉你不想要的行,这不是更容易吗?如果没有找到行,为什么你的查询要返回一个空行?这对我来说根本没有任何意义。@SeanLange对此不确定,但也许op在说空的rowLamak时表示没有行,我明白了。没有行意味着只有一行。很抱歉我的措辞不正确。您应该给排序顺序列一个别名,并按别名排序。“按顺序排序是非常危险的。”肖恩朗格纠正了这一点,但从未听说过这种危险。有参考资料吗?ThanksIt不是一个参考资料。考虑一下,如果按序号顺序排序,其他人会出现,并更改SELECT语句中列的顺序。突然,你的结果出现了错误的顺序。在这样一个简单的查询中,这是显而易见的,但在较长的查询中,这可能是一个真正的问题。和往常一样,最好是直截了当,而不是走一条捷径,这条捷径以后会咬到你的屁股。@Horaciux唉,这里有一个链接。谢谢@Lamak。我早该知道Aaron会写一篇关于这个的文章。你不想其他的是2吗?按照这里的编码方式,它的顶部应该有name2。这似乎是我做这件事的最简单的方式。@SeanLange他正在使用desc,我想这就是诀窍,没有输入错误。或者按NULLIFname排序,@name1。简洁但晦涩。但要简洁。
select top 1 t.*
from table t
where name in (@name1, @name2)
order by (case when name = @name1 then 1 else 0 end) desc;