Показать значение эквивалентных столбцов, сгруппировав столбец, который соответствует условию - PullRequest
0 голосов
/ 03 апреля 2019

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

ID  |  Name  |  GroupId  | Associate
 1  |    A   |     x     |   j
 2  |    A   |     y     |   k
 3  |    B   |     x     |   j
 4  |    C   |     z     |   j
 5  |    A   |     z     |   l
 6  |    B   |     y     |   m
 7  |    C   |     x     |   l

Условие: группировать по имени и если COUNT (GroupId)> 1, и если любой GroupId равен y, тогда отображается y и соответствующее значение столбца Associate, в противном случае любой GroupId и его эквивалентный Associate в порядке

Ожидаемый результат:

Name  |  GroupId  |  Associate
  A   |     y     |    k
  B   |     y     |    m
  C   |     z     |    j

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

Я не вижу условия для значения 'x' в этом вопросе (и оно не будет применимо в этой ситуации), поэтому:

select t.* 
from tablename t inner join (
select 
  name,
  case 
    when sum(case when groupid = 'y' then 1 end) > 0 then 'y'
    else max(groupid)
  end groupid   
from tablename
group by name
) g on g.name = t.name and g.groupid = t.groupid 

См. Демонстрационную версию .

0 голосов
/ 03 апреля 2019

Это то, что вы хотите?

select t.*
from t
where t.id = (select t2.id
              from t t2
              where t2.name = t.name
              order by (case when t2.groupid = 'y' then 1 else 2 end)
              limit 1
             );

Возвращает одну строку с "y", если доступно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...