Объединить две строки, которые разделяют повторяющиеся поля, используя sql - PullRequest
0 голосов
/ 29 ноября 2018

Добрый день всем,

Это мой первый вопрос, надеюсь, я буду достаточно ясен.Я пытаюсь объединить дубликаты строк, которые имеют одинаковые поля.Не все поля одинаковы, но единственное, что делает больше rws, это нулевые значения.

Для примера, я получаю результат:

<table>
  <tr>
    <th>NAME</th>
    <th>ID</th>
    <th>ALIAS 1</th>
    <th>ALIAS 2</th>
  </tr>
  <tr>
    <td>MPE</td>
    <td>3333</td>
    <td>Null</td>
    <td>3</td>
  </tr>
  <tr>
    <td>MPE</td>
    <td>3333</td>
    <td>6</td>
    <td>Null</td>
  </tr>
</table>

И результат, который я хотел бы получить:

<table>
  <tr>
    <th>NAME</th>
    <th>ID</th>
    <th>ALIAS 1</th>
    <th>ALIAS 2</th>
  </tr>
  <tr>
    <td>MPE</td>
    <td>3333</td>
    <td>6</td>
    <td>3</td>
  </tr>
</table>

Это пример для упрощения, но на самом деле мой запрос выглядит примерно так:

SQL REQUEST

И у меня есть несколько строк для одного и того же идентификатора.Я почти уверен, что есть способ объединить эти результаты в одну строку знака, заменив нулевые значения значениями, которые содержат действительное значение.

Не стесняйтесь спрашивать, нужна ли вам большая точность.Я очень благодарен вам.Я уже много на этом сайте ищу, но ничего не получается ...

Я пытался сгруппировать значения, спасибо Йогешу Шарме за его ответ.Но дело в том:

Поскольку значение «Null» является значением, группа по выражению не достаточна для объединения целлов путем удаления значения «null».Что было бы замечательно, так это группа по выражению, которая не принимает значение «ноль» в качестве значения.

См. Ниже:

GROUP BY EXPRESSION RESULT

Хорошего вам дня.

Matteo

Ответы [ 2 ]

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

Я думаю, что вы могли бы присоединиться к таблице обратно к себе для достижения этого.

что-то вроде

select a.Name, a.ID, a.alias_1, b.alias_2

from table a join table b 
on a.ID = b.ID and a.alias_1 != 'Null' and b.alias_2 != 'Null'

, хотя это может быть немного тяжелым для обработки, если вы работаете сбольшие столы

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

Просто выполните агрегацию:

select name, id, max(alias1), max(alias2)
from table t
group by name, id;

РЕДАКТИРОВАТЬ : используйте выражение регистра, чтобы рассматривать текст null как NULL:

select name, id, 
       max(case when alias1 = 'null' then null else alias1 end), 
       max(case when alias2 = 'null' then null else alias2 end)
from table t
group by name, id;
...