2016-06-22 3 views
1

У меня есть E_ids, которые связаны с парой d_ids и с o_count в любом из (1,0,null).
Итак, если у какого-либо из E_IDs есть O_count = 1, я должен закрепить его в одну строку и написать O_count = 1 за это E_ID else 0.Деловые заявления с любыми

Но когда я делаю ниже, я получаю все строки без группировки, т. Е. Получаю две строки одного и того же e_ids. Есть ли другой способ сделать то же самое?

SELECT DISTINCT E_ID, status 
    (CASE WHEN o_count = any(1) THEN 1 
     WHEN o_count = any(0) THEN 0 
    ELSE null END 
) Ocount 
FROM (SELECT e_id, status, o_count FROM A) 
GROUP BY e_id, status, o_count 

ответ

0

Да, просто обернуть его MAX():

SELECT E_ID,status 
     MAX(case when o_count = 1 then 1 ELSE 0 END) as Ocount 
FROM A 
GROUP BY e_id,status 

Кроме того, к югу от запроса не было необходимости, вы не делаете никакой логики там.

+0

На самом деле я присоединяюсь два таблицы в этом суб-запросе. Это всего лишь часть всего запроса. Пробовал сделать это немного легко объяснить. :) Даже делать это не помогает. Я все еще получаю две строки с одним и тем же идентификатором. – Pri

+0

@Pri О, мой плохой, забыл удалить его из группы, теперь будет работать. – sagi

+0

Да, это работает. Ура! Огромное спасибо. Я боролся с этим. Я не могу голосовать сейчас, потому что я новичок в Stack Overflow. Сделаю ASAP :) – Pri

0

Прежде всего, вы группируете e_id, status, o_count. Это означает, что вы суммируете свои данные таким образом, чтобы получить одну строку для каждой такой комбинации. Разве вы не хотите получить одну строку результатов за e_id или, может быть, e_id плюс status?

Тогда у вас есть конструкция case, не содержащая никакой функции агрегации, но только o_count, которая является частью вашего предложения group by. Таким образом, вы смотрите на одну строку, где хотите o_count = any(1), что точно так же, как o_count = 1, потому что в указанном наборе есть только одно значение. Вы можете заменить полное выражение case простым o_count.

Затем вы применяете distinct. Но не может быть дубликатов, поскольку вы группируете все используемые столбцы. Итак, distinct здесь ничего не делает.

Выбрав из подзапроса без какой-либо where предложение или агрегация также является излишним, и вы можете выбрать из таблицы a напрямую.

Ваш запрос может быть переписана в виде

select distinct e_id, status, o_count 
from a; 

Я полагаю, вы хотите что-то вроде этого: вместо

select e_id, status, max(o_count) 
from a 
group by e_id, status; 

Или это:

select e_id, max(status), max(o_count) 
from a 
group by e_id; 
Смежные вопросы