2014-10-14 2 views
0

Ниже приведена таблица, которая имеет два столбца ID и результат,Группировка столбец таблицы

 
ID  Result 
8000010 YES 
8000010 NO 
8000011 YES 
8000012 NO 
8000023 NO 
8000025 YES 
8000025 YES 
8000026 NO 
8000026 NO 

мне нужно агрегировать таким образом, что, если результат в частности, сочетание ID is No затем все результат is No else Да. Например,

 
8000010 YES 
8000010 NO 

Выход
8000010 NO


 
8000025 YES 
8000025 YES 

Выход
8000025 ДА

+2

Вы еще что-нибудь пробовали? – logixologist

+1

Да, логиколог Я пробовал использовать 'partition over by', но не получил ожидаемого результата. – Stephy

ответ

2

Вы можете сделать это путем агрегирования.

Select Id, MIN(Result) 
from your_table 
group by Id 
+0

Одна вещь, которую следует отметить с помощью этого решения, состоит в том, что если в столбце 'result' содержится только что-либо, кроме' Yes' или 'No', эта логика ** может работать неправильно, поскольку работает над порядком алфавита символов , В противном случае это отлично работает :) –

+0

вы можете поместить условие, в котором будет фильтроваться результат, который вам не нужен в ваших совокупных функциях – mannyyysh

1

вы можете сделать это с помощью КТР также, что работа в качестве универсального решения, как это может работать через 3 или более значений в результате тоже, если мы предполагаем, что вы MAYBE также в качестве значения

;with new_table as ( select id, result, case when result = 'YES' then 3 when result = 'MAYBE' then 2 else 1 end as rank from your_table) select id, case when min(rank) = 1 then 'NO' when min(rank) = 2 then 'MAYBE' ELSE 'YES' end as Result from new_table group by id

Смежные вопросы