ISNULL或sql server中的任何替代方法,当子查询不存在数据时

时间:2013-09-18 12:07:29

标签: sql sql-server sql-server-2005

我有一种情况,我需要获取一些数据,以防我找不到某些查询的数据。例如

select id from abc where userid='XYZ'

在这种情况下,只有当表abc中存在userid ='XYZ'的记录时,我才会得到Id。

只有当id存在为null时,下面给出的代码才会给出123.这不是我所期待的。

select isnull(id,123) from abc where userid='XYZ'

我想要这样的东西:
如果abc中没有userid ='XYZ'的数据,那么应该输出一些特定的值。
例如。

select isnull((select id from abc where userid='XYZ'),123)

以上查询是否有类似的快捷方式?请建议。提前致谢

3 个答案:

答案 0 :(得分:1)

isnull在“列”级别工作,你需要的是如果一行是null,然后打印其他东西。

我会使用“虚拟”选择UNION ALL你的选择只包含一行,你想要显示的数据,如果没有返回,则从订单中选择前1。像

select top 1 id
from (
    select id, 1 from abc where userid='XYZ'
    UNION ALL
    select 123, 0
) X
order by 1 DESC

答案 1 :(得分:0)

select top 1 id
from
(
      select 1 as id, value from abc where userid='xyz'
      union 
      select 2, 123 
) v
order by ranking

答案 2 :(得分:0)

如果结果只返回一行,则可以使用变量。

DECLARE @Id INT;

SELECT @Id = id FROM abc WHERE userid='XYZ';

SET @Id = ISNULL(@Id, 123);

SELECT @Id AS Id;