如何根据另一列值(使用LEFT JOIN)有条件地替换列值?

时间:2016-06-09 22:39:20

标签: sql sql-server

我有这个问题:

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     |   |

由于JOIN,有两个functionCC列。我想要一个functionCC列,但以下是案例:

  1. 如果functionCC_ANULL,请使用functionCC_B
  2. 中的值
  3. 如果functionCC_A有值,functionCC_B也有值,请使用 functionCC_B
  4. 如果functionCC_A有值但functionCC_BNULL,请使用functionCC_A
  5. 如果NULL同时离开NULL
  6. 如何制作我的查询,以便我可以有条件地替换第一个functionCCfunctionCC_A)列值,具体取决于第二个functionCC列中的值{{1} })?

1 个答案:

答案 0 :(得分: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”,那么{b}如果没有列出任何列出的字段,则COALESCE()将返回NULL

我不确定_A_B是否用于说明目的,假设一个名为functionCC的列来自每个表,因此可能需要调整上面的名称