我有一种情况,我需要获取一些数据,以防我找不到某些查询的数据。例如
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)
以上查询是否有类似的快捷方式?请建议。提前致谢
答案 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;