我有临时表
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。
答案 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]);