在SQL中查找表中每行的最后一个NOT NULL列的值

时间:2012-03-21 16:09:15

标签: sql database sql-server-2008

我的数据库中有一个表,用于存储地址。地址可以是多行(1到6)

地址的每一行都存储为一个单独的列,最多6列。

我现在想循环遍历表中的每一行,并找到最后一个NOT NULL列的值。这可以是3,4,5或6列。

我需要一个SQL命令,在给定一行的情况下,我得到最后一列非空的值。

4 个答案:

答案 0 :(得分:4)

只需使用COALESCE()返回第一个非空值:

SELECT    COALESCE(Address6, Address5, Address4, Address3) AS LastNonNullValue
FROM      YourTable

答案 1 :(得分:3)

这取决于你最后一个非空列的含义。我假设你的意思是'给出这个列表,返回第一个带值',列表是[6,5,4,3]。如果是这样,请使用:

SELECT COALESCE(col6, col5, col4, col3)
FROM AddressTable
WHERE rowId = :input

COALESCE()函数返回解析为非null的第一个值,如果所有值都为null,则返回null。

答案 2 :(得分:2)

使用COALESCE命令:

SELECT COALESCE(column6, column5, column4, column3) FROM tbl

请注意列的相反顺序以选择第一个非空值。

答案 3 :(得分:0)

这样的东西会给你列号:

select 
    left(coalesce('0'+address6, '6'+address5, '5'+address4, '4'+address3, '3'+address2, '2'+address1, '1'),1)
from @Address