根据列中的值选择单行非空

时间:2015-06-17 16:37:54

标签: sql sql-server sql-server-2008

我有临时表

create table temp 
(
Id int ,
A int , 
B int )

样本包含

insert into temp(Id,A,B)values(456,1,null)
insert into temp(Id,A,B)values(456,null,2)

两行

现在我希望我的结果集为单行,因为Id为两行相同且A应包含非null值,在这种情况下为1,B也应包含非null值,在上面的情况下为2。

2 个答案:

答案 0 :(得分:3)

根据您的评论,这可能是max使用group by的最简单选项:

select id, max(a), max(b)
from temp
group by id

但是,如果多行有非空值,则可能无法产生所需的结果。

答案 1 :(得分:0)

您可以使用merge语句根据您的ID进行更新或插入:

MERGE Temp1 AS t1
USING (
    SELECT id
        ,max(a) as [A]
        ,max(b) as [B]
    FROM TEMP
    GROUP BY id
    ) AS t
    ON (T.id = T1.id)
WHEN MATCHED
    THEN
        UPDATE
        SET t1.[A] = t.[A],
            t1.[B] = t.[B]
WHEN NOT MATCHED
    THEN
        INSERT (Id,A,B)
        VALUES (
            t.[id],t.[A],t.[B]);