Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помогите создать запрос  [new]
SergeyNZ
Member

Откуда:
Сообщений: 113
Здравствуйте
подскажите можно ли реализовать следующее с помощью запроса:
есть 2 таблицы

Таблица A
    DAT
01.01.2008
02.01.2008
03.01.2008
04.01.2008
05.01.2008
06.01.2008
07.01.2008

Таблица B
    DAT        VAL
01.01.2008    1
04.01.2008    2
05.01.2008    3


Результат должен быть такой:
01.01.2008     1
02.01.2008     1
03.01.2008     1
04.01.2008     2
05.01.2008     3
06.01.2008     3
07.01.2008     3


Спасибо
1 апр 08, 13:12    [5486435]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
with 
  "Таблица A" as 
    (
      select to_date('01.01.2008','dd.mm.yyyy') as dat from dual union all
      select to_date('02.01.2008','dd.mm.yyyy') as dat from dual union all
      select to_date('03.01.2008','dd.mm.yyyy') as dat from dual union all
      select to_date('04.01.2008','dd.mm.yyyy') as dat from dual union all
      select to_date('05.01.2008','dd.mm.yyyy') as dat from dual union all
      select to_date('06.01.2008','dd.mm.yyyy') as dat from dual union all
      select to_date('07.01.2008','dd.mm.yyyy') as dat from dual 
    ),
  "Таблица B" as 
    (
      select to_date('01.01.2008','dd.mm.yyyy') as dat, 1 as val from dual union all
      select to_date('04.01.2008','dd.mm.yyyy') as dat, 2 as val from dual union all
      select to_date('05.01.2008','dd.mm.yyyy') as dat, 3 as val from dual
    )
select a.dat, 
       last_value(b.val ignore nulls) over(order by a.dat) as val
  from "Таблица A" a 
  left join "Таблица B" b
    on a.dat = b.dat
1 апр 08, 13:31    [5486577]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
SergeyNZ
Member

Откуда:
Сообщений: 113
Спасибо
Забыл сказать у меня 9.2
а это работает на 10
1 апр 08, 13:48    [5486693]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Констрантин
Member

Откуда:
Сообщений: 90
Вариант, если создать пакет
create or replace package Z_sql is
i integer;
function null_z(val integer) return integer;
end Z_sql;
/
create or replace package body Z_sql is
function null_z(val integer) return integer
is
begin
if val is not null then
i := val;
end if;
return(i);
end;
end Z_sql;
/
то возможно
with
"table a" as
(
select to_date('01.01.2008','dd.mm.yyyy') as dat from dual union all
select to_date('02.01.2008','dd.mm.yyyy') as dat from dual union all
select to_date('03.01.2008','dd.mm.yyyy') as dat from dual union all
select to_date('04.01.2008','dd.mm.yyyy') as dat from dual union all
select to_date('05.01.2008','dd.mm.yyyy') as dat from dual union all
select to_date('06.01.2008','dd.mm.yyyy') as dat from dual union all
select to_date('07.01.2008','dd.mm.yyyy') as dat from dual
),
"table b" as
(
select to_date('01.01.2008','dd.mm.yyyy') as dat, 1 as val from dual union all
select to_date('04.01.2008','dd.mm.yyyy') as dat, 2 as val from dual union all
select to_date('05.01.2008','dd.mm.yyyy') as dat, 3 as val from dual
)
select a.dat,
z_sql.null_z(last_value(b.val ) over(order by a.dat) )
as val
from "table a" a
left join "table b" b
on a.dat = b.dat
1 апр 08, 14:43    [5487137]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
SergeyNZ
Забыл сказать у меня 9.2
а это работает на 10
Например
1 апр 08, 14:45    [5487156]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
SergeyNZ
Member

Откуда:
Сообщений: 113
Jannny
SergeyNZ
Забыл сказать у меня 9.2
а это работает на 10
Например


Как раз то что надо
Спасибо
1 апр 08, 16:34    [5488042]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить