Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ISNULL或sql server中不存在子查询数据时的任何替代项_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

ISNULL或sql server中不存在子查询数据时的任何替代项

ISNULL或sql server中不存在子查询数据时的任何替代项,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有一种情况,我需要获取一些数据,以防我找不到特定查询的数据。e、 g 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'的数据,那么应该输出一些特定的值

我有一种情况,我需要获取一些数据,以防我找不到特定查询的数据。e、 g

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 top 1 id
from
(
      select 1 as id, value from abc where userid='xyz'
      union 
      select 2, 123 
) v
order by ranking
DECLARE @Id INT;

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

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

SELECT @Id AS Id;
isnull在“列”级别工作,您需要的是如果一行为null,则打印其他内容

我会将您所有的选择与一个“虚拟”选择结合起来,该选择只包含一行数据,您希望在没有返回任何数据的情况下显示这些数据,然后从中按顺序选择前1行。像

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

假设最多有一行匹配(如第三个查询所示),然后
从abc中选择ISNULL(MAX(id),123),其中userid='XYZ'
。@MartinSmith的可能复制品:很好用。!如果“id”列可以为null呢?@pavan6e-那么它的行为将与您的第三个查询相同。它不会返回
NULL
。为此,您可以在COUNT(*)=0时选择CASE,然后从abc中选择123 ELSE MAX(id)END,其中userid='XYZ'@MartinSmith:谢谢。这是helpful@MartinSmith我认为你需要把你的评论作为一个答案!对于多个记录?@Schalk-对于多个记录,可以使用podiluska答案的变体。它需要
TOP 1与TIES
UNION ALL
。您似乎忘记了
TOP 1
。除了使用
UNION ALL
而不是
UNION
之外,它的外观基本上与podiluska的相同。虽然这是最好的,但不确定它是否需要一个新的答案,而不是一个评论。是的,我忘记了前1名。关于联合,在可能的情况下始终使用UNION ALL,因为联合必须通过消除重复的过程,这是有成本的(当然不是在这种情况下,因为只有两行,但我始终使用它进行良好的实践)
select top 1 id
from (
    select id, 1 from abc where userid='XYZ'
    UNION ALL
    select 123, 0
) X
order by 1 DESC