|
Программирование >> Преобразование значений null
select e.hiredate, e.sal, (select sum(sal) from emp d where d.hiredate between e.hiredate-90 and e.hiredate) as spending pattern from emp e order by 1
Разворачивание результирующего множества, содержащего подсуммы Задача Требуется вычислить подсуммы, создать отчет и транспонировать его, чтобы обеспечить более наглядный результат. Например, поставлена задача создать отчет, представляющий руководителей каждого отдела и суммы заработных плат подчиненных каждого руководителя. Кроме того, необходимо получить две подсуммы: сумму всех заработных плат по отделам для служащих, работающих в чьем-то подчинении, и сумму всех заработных плат (сумму подсумм отдела). На данный момент имеется следующий отчет:
9400 24025 Необходимо сделать отчет более удобным для чтения и преобразовать приведенное выше результирующее множество в следующее:
Решение Первый шаг - получить подсуммы, используя расширение ROLLUP оператора GROUP BY. Следующий шаг - выполнить классический разворот (с помощью агрегатной функции и выражения CASE) для создания необходимых столбцов отчета. Функция GROUPING обеспечивает возможность без труда определять значения, являющиеся подсуммами (т. е. полученные в результате выполнения ROLLUP). В зависимости от того, как сортируются значения NULL в используемой СУБД, может потребоваться добавить в решение оператор ORDER BY, чтобы получить такое же результирующее множество, как представлено выше. DB2 и Oracle Используйте расширение ROLLUP оператора GROUP BY и затем выражение CASE для представления данных в более удобном формате:
Используйте расширение ROLLUP оператора GROUP BY и затем выражение CASE для представления данных в более удобном формате:
MySQL и PostgreSQL Функция GROUPING не поддерживается ни одной из этих СУБД. Обсуждение Приведенные выше решения идентичны, за исключением строки конкатенации и описания GROUPING, поэтому промежуточные результаты обсудим на примере решения для SQL Server (все сказанное здесь будет правомочно и для DB2, и для Oracle). Первый шаг - сформировать результирующее множество, суммируя значения SAL всех подчиненных каждого руководителя (MGR) для каждого отдела (DEPTNO). Идея в том, чтобы показать, сколько служащих подчиняется каждому руководителю в каждом отделе. Например, приведенный ниже запрос позволит сравнить заработные платы подчиненных руководителя KING из 10-го отдела с заработными платами подчиненных KING их 30-го отдела.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |