2016-05-16 48 views
0

可以說我有一個表TAB1選擇值和數據是:忽略空表,並從非空表

col1 col2 col3 
20 15 2016-04-04 00:00:00.000 
25 25 2016-03-03 00:00:00.000 
14 14 2016-03-03 22:22:22.223 
54 34 2016-04-04 21:22:33.333 

其他表TAB2是一個空表:

col1 col2 col3 

我想要的是它應該總是從tab2收集值,如果tab2是空的,它會移到tab1並從那裏收集值。

我知道我可以在列爲空時使用COALESCE。但它返回空列。這是我試過(假設我有一個大的數據集):

select coalesce(tab2.col2, tab1.col2) ab 
from tab2, tab1 

回答

2

與此問題:

select coalesce(tab2.col2, tab1.col2) ab 
from tab2, tab1 

是不是聚結;這是加入。或者缺少一個加入,而是。

你需要正確地聯接表所示:

select coalesce(tab2.col2, tab1.col2) ab 
from tab1 LEFT OUTER JOIN tab2 ON tab1.col1 = tab2.col1 

在這裏,我加入了Col1,所以當你coalesce()col2它會尋找一個非空的tab2col1值,如果它是NULL它將從tab1獲取col2值,其值爲col1

+0

或者,您可以使用'ISNULL'。在這種情況下,它應該像'COALESCE' ....'ISNULL(tab2.col2,tab1.col2)'一樣運行。這是一個更容易閱讀,伊莫。 – BenM

+0

完美。從來沒有想過這個。謝謝! – Norm