функция проверки значения внутри группы

есть_вопросик
Дата: 23.11.2009 13:42:24
Есть заказы и неопределенное количество заявок к каждому заказу.
У каждой заявки есть статус - закрыта/открыта. необходимо проставить статус заказа в зависимости от статуса всех его заявок. Если все заявки Закрыты, то заказ закрыт, если хотя бы одна заявка открыта, то весь заказ открыт.

Заказ Заявка Статус_заявки Стату_заказа

1 10 откр откр
1 11 закр откр
1 12 закр откр

2 20 закр закр
2 21 закр закр

3 30 закр откр
3 31 откр откр

Не могу сообразить как написать функцию, которая будет брать заказ, проверять статусы всех его заявок и в зависимости от этого - проставлять в каждой строке нужный статус заказа
Добрый Э - Эх
Дата: 23.11.2009 13:43:35
аналитические функции тебе в помощь.
Добрый Э - Эх
Дата: 23.11.2009 13:50:42
Как вариант:
with 
  t as 
    (
      select 1 as "Заказ", 10 as "Заявка", 'откр' as "Статус заявки" from dual union all
      select 1 as "Заказ", 11 as "Заявка", 'закр' as "Статус заявки" from dual union all
      select 1 as "Заказ", 12 as "Заявка", 'закр' as "Статус заявки" from dual union all

      select 2 as "Заказ", 20 as "Заявка", 'закр' as "Статус заявки" from dual union all
      select 2 as "Заказ", 21 as "Заявка", 'закр' as "Статус заявки" from dual union all

      select 3 as "Заказ", 30 as "Заявка", 'закр' as "Статус заявки" from dual union all
      select 3 as "Заказ", 31 as "Заявка", 'откр' as "Статус заявки" from dual
    )
select "Заказ", "Заявка", "Статус заявки", 
       nvl2(nullif(count(decode("Статус заявки",'откр',1)) 
                    over(partition by "Заказ"),0),'откр','закр') as "Статус заказа"
  from t;
Добрый Э - Эх
Дата: 23.11.2009 13:58:37
Чуть короче
select "Заказ", "Заявка", "Статус заявки", 
       decode(count(nullif("Статус заявки",'закр')) 
               over(partition by "Заказ"),0,'закр','откр') as "Статус заказа"
  from t