2014-02-10 28 views
0

认为这表:当这些字段不存在时,是否有可能让Sql Server返回空字段而不是什么?

____________ 
| ID | Value | 
| 1 | One | 
| 3 | Three | 

如果我像这样运行SELECT Value FROM myTable WHERE ID = 1查询我一定要得到它的appropiate价值,无论是One在这种情况下,但如果我改变ID任何其他数量的非在那张桌子上存在,当然,我不会在Value列上得到什么,因为那里没有任何数据。

但有没有办法让Sql Server在做这样的查询时至少返回一个空的空间?

的Sql拨弄相同的情况:http://sqlfiddle.com/#!3/f30f8/2

+0

http://sqlfiddle.com/#!3/f30f8/25 –

回答

2
select Value 
from YourTable 
where ID = 1 
union all 
select null 
where not exists 
     (
     select * 
     from YourTable 
     where ID = 1 
     ) 

所以,是的,这是技术上是可行的,但你可以看到为什么这是很容易在通用语言解决。

+0

我想这个,但它似乎只工作时,我选择应该在那里具体的一条记录,我不能选择范围它们之间有相同的特定记录。例如,如果我运行ID = 2的查询,它会给我空值,但是如果我运行ID> = 1和ID <= 3的查询,它只返回1和3的结果。 – user1676874

1

是的。你可以这样做:

select coalesce(max(value), '') 
from test t 
where id = 1; 

想法是,max()总是返回一个值。如果没有匹配,它将是NULL,并且您可以用空字符串(或其他)替换它。

+0

我正在尝试但我有一个问题,是否应该只返回1个值?因为即使当我为更完整的数据集运行更大的查询时,我也会得到这个结果,所以这个想法适用于这样的查询,而不仅仅是像这个例子那样的一行,我应该更好地解释它。 – user1676874

+0

我也尝试过只使用'COALESCE'而没有'MAX',但它永远不会取代那些不存在的数据以及应该取代它的数据。难道是因为它需要'空'而不是不存在? – user1676874

+0

@ user1676874。 。 。我不知道你的意思是更完整的数据集。你的问题对一个价值是非常明确的。如果你有一组不同的数据,我会建议你再问一个问题。至于没有'max()'的'coalesce()',这是行不通的。 –

相关问题