Предположим, у вас имеется база данных из нескольких таблиц. Например, такая, как предложено в предыдущей статье.
Простое представление
Предположим, мы хотим вывести список пользователей, упорядоченный по алфавиту.
Для создания представления выберите в меню SQL Workshop / Object Browser и нажмите кнопку + // View у правой границы окна. APEX начинает диалог, в ходе которого введите имя представления и нажмите кнопку Query Builder, которая открывает режим конструктора запроса (рисунок 1).
Там же можно просмотреть и редактировать код SQL, а также увидеть результат выполнения запроса. Нажав кнопку Return, вы получите сгенерированный код представления.
После сохранения вновь созданное представление появится в списке объектов View и будет доступно для просмотра и изменения.
После каждого изменения вьюшки требуется заново компилировать: для этого не забывайте нажимать кнопку Save and Compile (в режиме кода).
Теперь вы можете использовать его как источник данных для формы или отчета в веб-приложении.
Допустим, у Вас есть таблица или представление Продажи, состоящее из трех столбцов:
При увеличении количества товаров и лет эта таблица быстро вытягивается в высоту и становится не удобной для анализа. А если упорядочить годы и развернуть их список по ширине таблицы, то те же данные предстанут в более наглядном и компактном виде:
Для создания представления выберите в меню SQL Workshop / Object Browser и нажмите кнопку + // View у правой границы окна. APEX начинает диалог, в ходе которого введите имя представления и нажмите кнопку Query Builder, которая открывает режим конструктора запроса (рисунок 1).
Рисунок 1 – окно построителя запросов
Слева можно выбирать нужные таблицы (одинарный щелчок мышью), вверху – отмечать требуемые поля, в нижней части – описывать условия отбора, сортировку, группировку данных, переименовать поля.Там же можно просмотреть и редактировать код SQL, а также увидеть результат выполнения запроса. Нажав кнопку Return, вы получите сгенерированный код представления.
После сохранения вновь созданное представление появится в списке объектов View и будет доступно для просмотра и изменения.
После каждого изменения вьюшки требуется заново компилировать: для этого не забывайте нажимать кнопку Save and Compile (в режиме кода).
Теперь вы можете использовать его как источник данных для формы или отчета в веб-приложении.
Перекрестный запрос
Перекрестный запрос в APEX сильно отличается от соответствующей команды Access: здесь нет расширения SQL - команды TRANSFORM, однако имеется специальная функция PIVOT, которая позволяет развернуть сгруппированные расчетные показатели в удобную для просмотра таблицу.Допустим, у Вас есть таблица или представление Продажи, состоящее из трех столбцов:
Год
|
Колич
|
Товар
|
2009
|
5
|
Монитор
|
2010
|
3
|
Принтер
|
2011
|
4
|
Сканер
|
2009
|
5
|
Принтер
|
2010
|
8
|
Сканер
|
2011
|
6
|
Монитор
|
2009
|
5
|
Сканер
|
2010
|
4
|
Монитор
|
2011
|
7
|
Принтер
|
Товар
|
2009
|
2010
|
2011
|
Сканер
|
5
|
8
|
4
|
Монитор
|
5
|
4
|
6
|
Принтер
|
5
|
3
|
7
|
Как раз для этого и служит предложение PIVOT в команде SELECT:
select * from
( select год, колич, товар from Продажи )
pivot (sum(колич)
for год in (2009, 2010,2011) ) ;
Недостатком по сравнению с ACCESS является то, что данные в списке FOR ... IN надо перечислить явно, во время разработки запроса. Значит, с течением времени, когда в БД окажется информация за другие временные периоды, придется переписывать этот запрос. Но можете сразу перечислить все года вперед на предполагаемое время жизни вашего приложения.
Упражнение.
Создайте представления:
- «Выручка по торговым точкам (перекрестный)»,
- «Остатки товаров по торговым точкам (меньше 10 на последний день)».
Примеры этих запросов в Access приведены на рисунках 2 и 3:
Перекрестный запрос «Выручка по торговым точкам» и его результат
Выручка по торгТочкам_перекрестный
|
|||||
Дата
|
Итого
|
автовокзал
|
Парк Белинского
|
тц Арбат
|
Центральный рынок
|
01.07.2015
|
9 500,00р.
|
5 500,00р.
|
4 000,00р.
|
||
02.07.2015
|
11 500,00р.
|
6 500,00р.
|
5 000,00р.
|
||
03.07.2015
|
10 500,00р.
|
7 800,00р.
|
2 700,00р.
|
||
ИТОГ:
|
31 500,00р.
|
6 500,00р.
|
13 300,00р.
|
5 000,00р.
|
6 700,00р.
|
ОстаткиМеньше10
|
|||
Дата
|
Место
|
Товар
|
Остаток
|
03.07.2015
|
Парк Белинского
|
Попкорн
|
2
|
03.07.2015
|
Парк Белинского
|
Шар на палке
|
3
|
03.07.2015
|
Центральный рынок
|
Сувенир
|
5
|
02.07.2015
|
тц Арбат
|
Лимонад
|
7
|
01.07.2015
|
Парк Белинского
|
Попкорн
|
1
|
Рисунок 3 - Запрос "Остатки товара по торговым точкам (меньше 10 единиц)" и его результат


