如何检查列中的空值?并使用其他列代替?

sad*_*ter 1 sql-server-2008

我将如何编写涉及以下检查的查询:

如果colA为空则colB = colB1 + colB2

如果colA不为空那么colB = colA

swa*_*eck 11

根据 SQL 标准(适用于多种风格的 SQL),您可以使用该COALESCE()函数:

SELECT 
    colB = COALESCE (colA, (colB1 + colB2))
FROM theTable;
Run Code Online (Sandbox Code Playgroud)

或一个CASE表达式(它不是那么优雅,但可用于更复杂的条件):

SELECT 
    colB = CASE WHEN colA IS NOT NULL 
                  THEN colA
                ELSE colB1 + colB2
           END
FROM theTable;
Run Code Online (Sandbox Code Playgroud)

使用 T-SQL(适用于 Sybase 和 Microsoft SQL Server)

SELECT 
    colB = ISNULL (colA, (colB1 + colB2))
FROM theTable;
Run Code Online (Sandbox Code Playgroud)

但是,您没有告诉我们任何保证colB1colB2将始终具有价值。如果其中任何一个是,NULL那么一切都会是NULL。如果是这种情况,那么您可以COALESCE将条件链接起来,看起来像

colB = COALESCE(colA, (colB1 + colB2),0)
Run Code Online (Sandbox Code Playgroud)

或使用 ISNULL

colB = ISNULL(ISNULL(colA, (colB1 + colB2)),0)
Run Code Online (Sandbox Code Playgroud)

如果您不想在结果中使用它,而是在 a WHEREorHAVING条件中使用它,则不需要更改。任何一个:

WHERE    colB = COALESCE (colA, (colB1 + colB2))
Run Code Online (Sandbox Code Playgroud)

或者:

WHERE    colB = CASE WHEN colA IS NOT NULL 
                       THEN colA
                     ELSE colB1 + colB2
                END
Run Code Online (Sandbox Code Playgroud)

但你还有一个选择:

WHERE (  colB = colA
      OR colA IS NULL  AND  colB = colB1 + colB2
      )       
Run Code Online (Sandbox Code Playgroud)