SQL - 如果匹配则返回值,如果不匹配则返回列表的第一项

维他命

如果电话号码与提供的电话号码匹配,我需要一个 SQL 查询来返回一个电话号码,或者返回按最近排序的电话号码列表的第一个值。

假设客户有 3 个电话号码:

ID   ClientID   Number          Order
1    1          07123123123     2
2    1          07321321321     3
3    1          07111111111     1

如果查询中提供的电话号码是 07321321321,则它将返回 07321321321。如果提供的电话号码与任何数字都不匹配或为黑色,则它将返回前 1 个号码,按顺序列排序。

有没有明显的方法可以做到这一点,或者让以下 SQL 工作?

SELECT TOP 1 Number 
FROM ClientPhoneNumbers cpn 
WHERE cpn.ClientId = clientlist.ClientId 
ORDER BY (Number = <phonenumbersupplied>), cpn.[Order]) AS [PhoneNumber]

使用 SQL 服务器

谢谢!

戈登·利诺夫

我想我会这样做:

select top (1) number
from ((select @number, 1 as ord
       from ClientPhoneNumbers
       where number = @number
      ) union all
      (select top (1) number, 2
       from ClientPhoneNumbers
       order by order
      )
     ) cp
order by ord;

你也可以这样做:

select top (1) cpn.number
from ClientPhoneNumbers cpn
order by (case when cpn.number = @number then 1 else 2 end),
         cpn.order;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果设置匹配则返回 SQL

T-SQL-值与列表中的至少一项不匹配

SQL选择仅在找到数组中的第一项时IN(数组)才返回的地方

从SQL创建的列表中获取第一项

简单SQL查询,如果找不到匹配项,则返回null

如果字符串与sql不匹配,如何返回0

SQL:如果联接返回多个匹配项,则仅删除一行

如果行数 > X,则 SQL 返回值

SQL View返回值,如果找不到,则返回null

SQL IN子句仅返回ID以逗号分隔的列表中具有第一个匹配项的行

如果查询的时间不存在行,则SQL不返回值

如果与变量相比,T-SQL 语句中的 LIKE 子句不返回值?

SQL 连接日期和日期 - 如果未找到匹配项,则返回最近的日期

SQL:如果数据在时间窗口内显示,则返回值

Oracle SQL - 如果查询不返回结果,则返回一些默认值

如果匹配关键字,则 SQL 返回行

如果匹配条件,Excel 中的 SQL 返回字段

如果条件匹配,则查找列中字段总和的 SQL 查询,否则返回默认值

SQL-如果列值匹配模式,则返回所有记录?

如果匹配返回并从CASE语句退出,则使用CASE比较SQL中的值

Teradata SQL-在列中找到最后一个匹配项,然后从下面的行返回值

惯用Scala列表理解-匹配的第一项

SQL 返回最优值,如果

SQL 如果两列值不匹配,则显示所有不匹配的值

SQL JOIN 只返回第一個匹配項

在SQL的IN子句中为不匹配的值返回空行

删除并返回列表的第一项

SQL Server:ISNULL不返回值

匹配列表中的第一项和最后一项