将SQL Server中的多行合并为一个

时间:2018-11-09 18:20:39

标签: sql-server merge group-by

我有一张看起来像这样的桌子

ID   RefernceID    Field1    Field2    Field3
--   ----------    ------   --------   -------
1     A01           Cat      NULL      Dog  
2     A01           Cat      Fish      NULL  
3     A02           Banana   Apple     NULL 
4     A02           Banana   NULL     Mango 

我正试图得到这个

  ID   RefernceID    Field1    Field2    Field3
  --    ----------    ------   --------   -------
   1     A01           Cat      Fish      Dog  
   3     A02           Banana   Apple     Mango 

因此,基本上行由ReferenceIDField 1分组,然后我希望它们合并并替换为NULL。

任何帮助将不胜感激。

编辑:抱歉,忘记添加其他列了(我只是没有提到,我仍然需要ID值之一。

3 个答案:

答案 0 :(得分:0)

一个巧妙的技巧是使用maxmin,而忽略null。因此,如果只有一个非null值,则max将返回它。由于您只需要id之一,因此可以随意使用min,它将返回问题中显示的结果:

SELECT   MIN(id), referenceid, field1, MAX(field2), MAX(field3)
FROM     mytable
GROUP BY referenceid, field1

答案 1 :(得分:0)

您要聚合:

select referenceid, field1, max(field2), max(field3)
from table t
group by referenceid, field1;

答案 2 :(得分:0)

您可以将简单的聚合(max)用作:

select RefernceID, 
       min(ID) as ID,
       max(field1) as field1,
       max(field2) as field2, 
       max(field3) as field3
  from tab
 group by RefernceID