Объединить записи, в которых есть хотя бы один ненулевой элемент в определенном столбце - SQL Server - PullRequest
0 голосов
/ 19 октября 2019

Мои данные выглядят следующим образом:

id      ProteinID   Gene_Name   Class
10008   P08648      ITGA5       extracellular
10009   P08648      ITGA5       extracellular
10011   P08473      MME 10      NULL
10011   P08473      MME 10      extracellular
10013   P12111      COL6A3      NULL
10016   P09619      PDGFRB      NULL
10016   P09619      PDGFRB      intracellular

Я хотел бы объединить записи, которые имеют как NULL, так и NON-NULL значение в столбце [Class], но в то же время не влияют на строкикоторые имеют только значение NULL (например, id 10013)

Ниже приводится желаемый результат:

id      ProteinID   Gene_Name   Class
10008   P08648      ITGA5       extracellular
10009   P08648      ITGA5       extracellular
10011   P08473      MME 10      extracellular
10013   P12111      COL6A3      NULL
10016   P09619      PDGFRB      intracellular

Я попытался использовать функцию COALESCE, но он удаляет все строки с NULL в[Класс].

Я уверен, что есть простой способ сделать это, но я застрял.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 19 октября 2019

Не уверен, что это ваше намерение

Пример

Select top 1 with ties * 
 From  YourTable
 Order By Row_Number() over (Partition By ID,ProteinID,Gene_Name  order by Class Desc)

Возвращает

enter image description here

1 голос
/ 19 октября 2019

Я думаю, что вы хотите агрегирование:

SELECT id, ProteinID, Gene_Name, MAX(class) as class
FROM t
GROUP BY id, ProteinID, Gene_Name;

Если вы хотите все ненулевые значения, я мог бы пойти на:

select t.*
from t
where class is not null
union all
select t.*
from t
where class is null and
      not exists (select 1 from t t2 where t2.id = t.id and t2.class is not null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...