Программирование >>  Преобразование значений null 

1 ... 133 134 135 [ 136 ] 137 138 139 ... 219


ORDER DATE

PROCESS DATE

VERIFIED

SHIPPED

25-SEP-2005

27-SEP-2005

25-SEP-2005

27-SEP-2005

28-SEP-2005

25-SEP-2005

27-SEP-2005

28-SEP-2005

29-SEP-2005

26-SEP-2005

28-SEP-2005

26-SEP-2005

28-SEP-2005

29-SEP-2005

26-SEP-2005

28-SEP-2005

29-SEP-2005

30-SEP-2005

27-SEP-2005

29-SEP-2005

27-SEP-2005

29-SEP-2005

30-SEP-2005

27-SEP-2005

29-SEP-2005

30-SEP-2005

01-OCT-2005

Окончательное результирующее множество представляет весь процесс обработки заказа, от дня получения до дня, когда он должен быть поставлен.

1 3 27-SEP-2005 29-SEP-2005

2 3 27-SEP-2005 29-SEP-2005

3 3 27-SEP-2005 29-SEP-2005

Теперь, имея по три строки для каждого заказа, просто с помощью выражения CASE создаем дополнительные столбцы для представления статуса контроля и поставки.

Первая строка каждого заказа в столбцах VERIFIED и SHIPPED должна содержать значения NULL. Во второй строке значение NULL установлено для столбца SHIPPED. В третьей строке каждого заказа ни в одном столбце не должно быть значения NULL. Окончательный результат показан ниже:

with nrows as ( select level n

from dual connect by level <= 3

select id,

order date, process date, case when nrows.n >= 2 then process date+1 else null end as verified, case when nrows.n = 3 then process date+2 else null end as shipped from ( select nrows.n id,

sysdate+nrows.n order date, sysdate+nrows.n+2 process date from nrows

) orders, nrows



PostgreSQL

Результирующее множество, представленное в разделе Задача , получено посредством вложенного запроса ORDERS и показано ниже:

select gs.id,

current date+gs.id as order date, current date+gs.id+2 as process date from generate series(1,3) gs (id)

ID ORDER DATE PROCESS DATE

1 25-SEP-2005 27-SEP-2005

2 26-SEP-2005 28-SEP-2005

3 27-SEP-2005 29-SEP-2005

Приведенный выше запрос для составления трех строк, представляющих заказы, которые подлежат обработке, просто использует оператор

GENERATE SERIES. GENERATE SERIES возвращает значения 1, 2

и 3. Эти числа добавляются к CURRENT DATE для представления дат получения заказов. Поскольку в разделе Задача определено, что обработка заказа занимает два дня, для получения даты окончания выполнения заказа в приведенном выше запросе к значению ORDER DATE добавляется два дня (к CURRENT DATE прибавляем значение, возвращенное GENERATE SERIES, и еще два дня).

Получив базовое результирующее множество, перейдем к созданию декартова произведения, поскольку стоит задача получить по три строки для каждого заказа. Для этого используем функцию GENERA-

TE SERIES:

select gs.n,

orders.*

from ( select gs.id,

current date+gs.id as order date, current date+gs.id+2 as process date from generate series(1,3) gs (id) ) orders, generate series(1,3)gs(n)

N ID ORDER DATE PROCESS DATE

1 1 25-SEP-2005 27-SEP-2005

2 1 25-SEP-2005 27-SEP-2005

3 1 25-SEP-2005 27-SEP-2005

1 2 26-SEP-2005 28-SEP-2005

2 2 26-SEP-2005 28-SEP-2005

3 2 26-SEP-2005 28-SEP-2005

1 3 27-SEP-2005 29-SEP-2005

2 3 27-SEP-2005 29-SEP-2005

3 3 27-SEP-2005 29-SEP-2005



Теперь, имея по три строки для каждого заказа, просто с помощью выражения CASE создаем дополнительные столбцы для представления статуса контроля и поставки.

Первая строка каждого заказа в столбцах VERIFIED и SHIPPED должна содержать значения NULL. Во второй строке значение NULL установлено для столбца SHIPPED. В третьей строке каждого заказа ни в одном столбце не должно быть значения NULL. Окончательный результат показан ниже:

select id,

order date,

process date,

case when gs.n >= 2

then process date+1 else null end as verified, case when gs.n = 3

then process date+2 else null end as shipped from ( select gs.id,

current date+gs.id as order date, current date+gs.id+2 as process date from generate series(1,3) gs(id) ) orders, generate series(1,3)gs(n)

ID ORDER DATE PROCESS DATE VERIFIED SHIPPED

1 25-SEP-2005 27-SEP-2005

1 25-SEP-2005 27-SEP-2005 28-SEP-2005

1 25-SEP-2005 27-SEP-2005 28-SEP-2005 29-SEP-2005

2 26-SEP-2005 28-SEP-2005

2 26-SEP-2005 28-SEP-2005 29-SEP-2005

2 26-SEP-2005 28-SEP-2005 29-SEP-2005 30-SEP-2005

3 27-SEP-2005 29-SEP-2005

3 27-SEP-2005 29-SEP-2005 30-SEP-2005

3 27-SEP-2005 29-SEP-2005 30-SEP-2005 01-OCT-2005

Окончательное результирующее множество представляет весь процесс обработки заказа, от дня получения до дня, когда он должен быть поставлен.



1 ... 133 134 135 [ 136 ] 137 138 139 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.065
При копировании материалов приветствуются ссылки.
Яндекс.Метрика