4

我有一个问题,我需要合并一堆重复的数据。我从一个从两个不同来源合并的表开始。数据的一个例子是:

aID, bID, value1, value2, value3, value4

问题是在某些情况下,aID 与 bID 匹配,但仅填写了其他字段之一:

1, 1, samedata, null, null, 1
1, 1, samedata, 红色, null, null
1, 1, samedata, null, htmldata, null

我正在寻找一种方法来显示整行数据,但汇总所有非空值,以便每个匹配的 id 有一行。我一直在尝试 Group By 和 Group_Concat,但还没有找到秘诀。

我想从上面的例子中得到的第一行是:

1, 1, 相同数据, 红色, htmldata, 1

有任何想法吗?

4

2 回答 2

3

一个技巧是使用MAXor MIN,因为它们会更喜欢非空值而不是空值:

SELECT aID,
       bID,
       MAX(value1) AS value1,
       MAX(value2) AS value2,
       MAX(value3) AS value3,
       MAX(value4) AS value4
  FROM ...
 GROUP
    BY aID,
       bID
;

(当我MAX为此目的使用时,我通常会在注释中注明这一点,因为这对于普通读者来说并不是很明显。)

于 2012-07-16T20:21:39.447 回答
0

尝试这个::

Select 
aID,
bId,
value1,
value2, value3
from table 
group by CONCAT(ifnull(aID,-1),ifnull(bId)
于 2012-07-16T20:19:19.947 回答