我有3列:
col1, int
col2, char(10)
col3, char(11)
其中只有一个在其中有任何价值,它可以是其中之一。
我想检查哪些列为空,并添加一个列,其值为第四列:col4。
我使用T-SQL
答案 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;