2014-02-10 53 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()',這是行不通的。 –

相關問題