Объединение нескольких строк в SQL Server в одну - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть таблица, которая выглядит следующим образом

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 

Таким образом, в основном строки сгруппированы по ReferenceID и Field 1, а затем я хочу, чтобы они слились с заменой NULL.

Любая помощь будет оценена.

РЕДАКТИРОВАТЬ: Извините, забыл добавить, что есть и другие столбцы (я просто не упомянул, и мне все еще нужно одно из значений ID.

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Требуется агрегация:

select referenceid, field1, max(field2), max(field3)
from table t
group by referenceid, field1;
0 голосов
/ 09 ноября 2018

Вы можете использовать простое агрегирование (max) как:

select RefernceID, 
       min(ID) as ID,
       max(field1) as field1,
       max(field2) as field2, 
       max(field3) as field3
  from tab
 group by RefernceID    
0 голосов
/ 09 ноября 2018

Аккуратный трюк заключается в использовании max или min, которые просто игнорируют null с. Поэтому, если у вас есть только одно не null значение, max вернет его. Поскольку вам просто нужен один из id s, вы можете произвольно использовать min, который вернет результат, показанный в вопросе:

SELECT   MIN(id), referenceid, field1, MAX(field2), MAX(field3)
FROM     mytable
GROUP BY referenceid, field1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...