如果其中一个为空,则加入列

时间:2016-09-23 13:36:12

标签: sql join

我有3列:

col1, int 
col2, char(10) 
col3, char(11)

其中只有一个在其中有任何价值,它可以是其中之一。

我想检查哪些列为空,并添加一个列,其值为第四列:col4。

我使用T-SQL

3 个答案:

答案 0 :(得分:3)

试试这个

select col1,col2,col3, coalesce(col1, coalesce(col2,col3)) as col4
from your_table
  

COALESCE返回表达式列表中的第一个非空expr。如果所有出现的expr都计算为null,则该函数返回null。

答案 1 :(得分:3)

您可以使用IS NULL比较为每列返回布尔值true或false,并COALESCE()找到所有列中的第一个非空值

SELECT
  col1 IS NULL AS col1_null,
  col2 IS NULL AS col2_null,
  col3 IS NULL AS col3_null,
  COALESCE(cast(col1 as char(11)), cast(col2 as char(11)), cast(col3 as char(11)) AS first_not_null_val
FROM table

COALESCE()函数中提供的列的顺序很重要,但由于这三个中只有一个不为null,因此它总是会返回那个。

注意:您需要将列转换为COALESCE()的相同数据类型。由于您的上限为char(11),因为它涵盖了char(10)int类型,因此我提出了这一点。我想你想要保留空格,这就是你首先使用char的原因。

答案 2 :(得分:1)

SELECT COALESCE(CONVERT(CHAR(11), col1), CONVERT(CHAR(11), col2), col3)
FROM yourtable;

TSQL: COALESCE