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