2016-06-09 75 views
0

我有這個疑問:如何根據另一列值(使用LEFT JOIN)有條件地替換列值?

SELECT * from #b as t 
LEFT outer JOIN WR_16h_vs_MVA_16h_csv as csv 
on t.PROBE_ID = csv.PROBE_ID; 

返回的結果是這樣的:

|id|...|...|...|functionCC_A|...|functionCC_B|...| 
------------------------------------------ 
|1 | | | | lalala  | | NULL  | | 
|2 | | | | asdad  | | bababa | | 
|3 | | | | NULL  | | NULL  | | 
|n | | | | werwer  | | NULL  | | 

有因爲一個連接兩個functionCC列。我想一個functionCC列,但這裏的情況:

  1. 如果functionCC_ANULL,從functionCC_B
  2. 使用價值如果functionCC_A具有價值等做functionCC_B,使用 functionCC_B
  3. 如果functionCC_A有值但是functionCC_BNULL,使用functionCC_A
  4. 如果兩個NULL都離開爲NULL

我如何能夠制定我的查詢,這樣我可以有條件地更換第一functionCCfunctionCC_A)列值,取決於值在第二functionCC列(functionCC_B)?

回答

3

COALESCE()函數返回一個列表的第一個非空值,因此是這樣的:

SELECT COALESCE(csv.functionCC,t.functionCC) AS functionCC 
from #b as t 
LEFT outer JOIN WR_16h_vs_MVA_16h_csv as csv 
on t.PROBE_ID = csv.PROBE_ID; 

這滿足了,因爲你想「B」,如果它的填充和COALESCE()將返回NULL如果沒有所有標準所列列出的字段已填充。

我不確定_A_B是出於說明的目的,假定每個表格都有一列名爲functionCC的列,所以可能需要調整上面的名稱。

+0

是的,用於說明目的。要選擇所有其他列,我是否必須明確指定它們? – pookie

+0

是的,如果你想爲多個列做同樣的事情,你必須有一堆像上面那樣的'COALESCE()'語句。 –

+0

謝謝,我會給你一個回去找回你。 – pookie

相關問題