Читайте также: |
|
Рис. 36. Результат выполнения сортировки
с использованием функции NVL
Пример 19. Для проектов, которым назначено подразделение-исполнитель, выбрать информацию об их номере, названии и бюджете, а также наименовании подразделения-исполнителя. Считать, что проекты, для которых бюджет не указан, имеют нулевой бюджет. В результирующей информации неопределенные значения бюджетов должны быть заменены нулем. При этом информация должна быть упорядочена в алфавитном порядке по наименованию подразделения, а внутри каждого подразделения – по убыванию бюджета проекта.
В данном случае сортировке должно быть подвергнуто простое объединение информации из двух таблиц. Запрос для простого объединения будет иметь следующий вид:
SELECT p.proj_no, p.proj_name,
NVL(p.budget,0) AS budget_new,
d.dept_name
FROM project p, department d
WHERE p.dept_no = d.dept_no
В данном запросе в качестве результирующей колонки используется выражение NVL(p.budget,0), после которого следует ключевое слово AS и наименование “budget_new”. Такая конструкция позволяет в результате запроса задать колонке новое название. В данном случае колонка, содержащая результат функции NVL(p.budget,0), будет иметь название “budget_new”. Переименование колонок в результате запроса удобно для назначения имен колонкам, содержащим результаты каких-либо выражений (как в данном случае), а также для изменения наименований колонок, имеющих слишком длинные или интуитивно непонятные названия. Ключевое слово AS может быть опущено, а запрос представлен в виде:
SELECT p.proj_no, p.proj_name,
NVL(p.budget,0) budget_new,
d.dept_name
FROM project p, department d
WHERE p.dept_no = d.dept_no
В результате такого запроса данные могут быть выбраны в произвольном порядке. Теперь добавим к запросу сортировку с использование конструкции ORDER BY, после которой укажем критерии сортировки. При этом допустимы различные варианты завершения запроса:
ORDER BY d.dept_name ASC, NVL(p.budget,0) DESC
или
ORDER BY d.dept_name, NVL(p.budget,0) DESC
или
ORDER BY d.dept_name, budget_new DESC
или
ORDER BY 4, 3 DESC
Последний вариант основан на использовании номеров, определяющих положение колонки в результате запроса: 4 – наименование подразделения, 3 – бюджет проекта. Результаты всех запросов будут одинаковы. Если использовать первый, классический вариант конструкции ORDER BY, то полный текст запроса будет следующим:
SELECT p.proj_no, p.proj_name,
NVL(p.budget,0) budget_new,
d.dept_name
FROM project p, department d
WHERE p.dept_no = d.dept_no
Дата добавления: 2015-08-17; просмотров: 41 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
ORDER BY budget DESC | | | Часть 1 1 страница |