2016-06-09 191 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

相关问题