Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Запрос для распределения количества пива по дням недели  [new]
AlRight
Guest
Приветствую всех. Не могу решить задачку ..
Есть 2 таблицы: одна - с данными о количестве банок пива, требующихся, например, на каждый день: (id_day - номер дня, beer_cnt - кол-во банок)
select 1 id_day, 1 beer_cnt from dual union all
select 2 id_day, 2 beer_cnt  from dual union all
select 3 id_day, 1 beer_cnt  from dual union all
select 4 id_day, 2 beer_cnt  from dual union all
select 5 id_day, 1 beer_cnt  from dual
вторая таблица - с данными о кол-ве банок, имеющихся в холодильниках:(id_cooler- номер холодильника, beer_cnt - кол-во банок)
select 1 id_cooler, 2 beer_cnt from dual union all
select 2 id_cooler, 4 beer_cnt from dual
id_day и id_cooler - уникальные ключи таблиц, не имеют ограничения на максимальное значение.

С холодильниками напряженка и с пивом в них - тоже. Но выпить надо всё, а потом - работать.

Требуется написать запрос, формирующий набор данных с порядком извлечения нужного кол-ва банок из холодильников по дням:

id_day | id_cooler | beer_cnt
1 | 1 | 1
2 | 1 | 1
2 | 2 | 1
3 | 2 | 1
4 | 2 | 2
Типа, на id_day=5 уже ничего не осталось :(

Вот не получается никак. Помогите пожалуйста
19 сен 08, 14:15    [6205647]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для распределения количества пива по дням недели  [new]
Elic
Member

Откуда:
Сообщений: 29990
STFF Укомплектование заказов товарами с полок склада
19 сен 08, 14:26    [6205708]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для распределения количества пива по дням недели  [new]
AlRight
Guest
С П А С И Б О! :)
19 сен 08, 14:33    [6205755]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для распределения количества пива по дням недели  [new]
DenSoft
Member

Откуда: Москва
Сообщений: 280
А чего там распределять то?
Если кончится можно быстренько добежать до ближайшего магазина :)
--
Однако, пятница!
19 сен 08, 15:33    [6206195]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для распределения количества пива по дням недели  [new]
как вариант
Guest
еще вариант
with
beer as (select 1 id_day, 1 beer_cnt from dual union all
select 2 id_day, 2 beer_cnt  from dual union all
select 3 id_day, 1 beer_cnt  from dual union all
select 4 id_day, 2 beer_cnt  from dual union all
select 5 id_day, 1 beer_cnt  from dual),
cooler as (select 1 id_cooler, 2 beer_cnt from dual union all
select 2 id_cooler, 4 beer_cnt from dual)
--
select
  id_day,id_cooler,
  case
    when b.ebc > c.ebc then c.ebc - b.sbc
    when b.sbc < c.sbc then b.ebc - c.sbc
    else b.ebc - b.sbc
  end beer_cnt
from
  (
    select
      id_day,
      sum(beer_cnt) over (order by id_day) - beer_cnt sbc,
      sum(beer_cnt) over (order by id_day) ebc
    from beer
  ) b,
  (
    select
      id_cooler,
      sum(beer_cnt) over (order by id_cooler) - beer_cnt sbc,
      sum(beer_cnt) over (order by id_cooler) ebc
    from cooler
  ) c
where
  b.sbc < c.ebc and
  b.ebc > c.sbc
order by
  id_day, id_cooler
19 сен 08, 16:33    [6206626]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить