|
Программирование >> Преобразование значений null
from nrows 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 Приведенный выше запрос для составления трех строк, представляющих заказы, которые подлежат обработке, просто использует оператор WITH. NROWS возвращает значения 1, 2 и 3. Эти числа добавляются к результату GETDATE (CURRENT DATE для DB2) для получения дат выполнения заказов. Поскольку в разделе Задача определено, что обработка заказа занимает два дня, для получения даты окончания выполнения заказа в приведенном выше запросе к значению ORDER DATE добавляется два дня (к GETDATE прибавляем значение, возвращенное NROWS, и еще два дня). Получив базовое результирующее множество, перейдем к созданию декартова произведения, поскольку стоит задача получить по три строки для каждого заказа. Для этого используем рекурсивное представление NROWS: with nrows(n) as ( select 1 from t1 union all select n+1 from nrows where n+1 <= 3 select nrows.n, orders.* from ( select nrows.n id, getdate()+nrows.n as order date, getdate()+nrows.n+2 as process date from nrows ) orders, nrows order by 2,1 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 создаем дополнительные столбцы для представления статуса контроля и поставки.
Окончательное результирующее множество представляет весь процесс обработки заказа, от дня получения до дня, когда он должен быть поставлен. Oracle Результирующее множество, представленное в разделе Задача , получено посредством вложенного запроса ORDERS и показано ниже: with nrows as ( select level n Первая строка каждого заказа в столбцах VERIFIED (контроль прошел) и SHIPPED (поставлен) должна содержать значения NULL. Во второй строке значение NULL установлено для столбца SHIPPED. В третьей строке каждого заказа ни в одном столбце не должно быть значения NULL. Окончательный результат показан ниже: with nrows(n) as ( select 1 from t1 union all select n+1 from nrows where n+1 <= 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, getdate()+nrows.n as order date, getdate()+nrows.n+2 as process date from nrows ) orders, nrows order by 1 from dual connect by level <= 3 select nrows.n id, sysdate+nrows.n order date, sysdate+nrows.n+2 process date from nrows 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 Приведенный выше запрос для составления трех строк, представляющих заказы, которые подлежат обработке, просто использует оператор CONNECT BY. Используем оператор WITH, чтобы обращаться к строкам, возвращенным CONNECT BY, через NROWS.N. CONNECT BY возвращает значения 1, 2 и 3. Эти числа добавляются к результату SYS-DATE для представления дат получения заказов. Поскольку в разделе Задача определено, что обработка заказа занимает два дня, для получения даты окончания выполнения заказа в приведенном выше запросе к значению ORDER DATE добавляется два дня (к SYSDATE прибавляем значение, возвращенное GENERATE SERIES, и еще два дня). Получив базовое результирующее множество, перейдем к созданию декартова произведения, поскольку стоит задача получить по три строки для каждого заказа. Для этого используем функцию NROWS: with nrows as ( select level n from dual connect by level <= 3 select nrows.n, orders.* from ( select nrows.n id, sysdate+nrows.n order date, sysdate+nrows.n+2 process date from nrows ) orders, nrows 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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |