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

1 ... 152 153 154 [ 155 ] 156 157 158 ... 219


Далее с помощью UNION ALL находим суммы всех заработных плат по должностям (JOB):

select deptno, job,

TOTAL BY DEPT AND JOB as category,

sum(sal) as sal from emp

group by deptno, job union all

select null, job, TOTAL BY JOB, sum(sal)

by job

CATEGORY

CLERK

TOTAL

DEPT

1300

MANAGER

TOTAL

DEPT

2450

PRESIDENT

TOTAL

DEPT

5000

CLERK

TOTAL

DEPT

1900

ANALYST

TOTAL

DEPT

6000

MANAGER

TOTAL

DEPT

2975

CLERK

TOTAL

DEPT

MANAGER

TOTAL

DEPT

2850

SALESMAN

TOTAL

DEPT

5600

ANALYST

TOTAL

6000

CLERK

TOTAL

4150

MANAGER

TOTAL

8275

PRESIDENT

TOTAL

5000

SALESMAN

TOTAL

5600

Следующий шаг - с помощью UNION ALL находим суммы всех заработных плат по отделам (DEPTNO):

select deptno, job,

TOTAL BY DEPT AND JOB as category,

sum(sal) as sal

from emp

group by deptno, job

union all

select null, job, TOTAL BY JOB, sum(sal)

from emp

group by job

union all

select deptno, null, TOTAL BY DEPT, sum(sal)

from emp

group by deptno

DEPTNO JOB

CATEGORY

10 CLERK TOTAL BY DEPT AND JOB 1300

10 MANAGER TOTAL BY DEPT AND JOB 2450

10 PRESIDENT TOTAL BY DEPT AND JOB 5000

20 CLERK TOTAL BY DEPT AND JOB 1900



ANALYST

TOTAL

DEPT AND JOB

6000

MANAGER

TOTAL

DEPT AND JOB

2975

CLERK

TOTAL

DEPT AND JOB

MANAGER

TOTAL

DEPT AND JOB

2850

SALESMAN

TOTAL

DEPT AND JOB

5600

ANALYST

TOTAL

6000

CLERK

TOTAL

4150

MANAGER

TOTAL

8275

PRESIDENT

TOTAL

5000

SALESMAN

TOTAL

5600

TOTAL

DEPT

8750

TOTAL

DEPT

10875

TOTAL

DEPT

9400

чительный

посредством

UNION ALL вычисляем сумму

всех заработных плат таблицы EMP:

select deptno, job,

TOTAL BY DEPT AND JOB as category,

sum(sal) as sal

from emp

group by deptno, job

union all

select null, job, TOTAL BY JOB, sum(sal)

from emp

group by job

union all

select deptno, null, TOTAL BY DEPT, sum(sal)

from emp

group by deptno

union all

select null,null, GRAND TOTAL FOR TABLE, sum(sal)

from emp

DEPTNO JOB

CATEGORY

CLERK

TOTAL

DEPT

1300

MANAGER

TOTAL

DEPT

2450

PRESIDENT

TOTAL

DEPT

5000

CLERK

TOTAL

DEPT

1900

ANALYST

TOTAL

DEPT

6000

MANAGER

TOTAL

DEPT

2975

CLERK

TOTAL

DEPT

MANAGER

TOTAL

DEPT

2850

SALESMAN

TOTAL

DEPT

5600

ANALYST

TOTAL

6000

CLERK

TOTAL

4150

MANAGER

TOTAL

8275

PRESIDENT

TOTAL

5000

SALESMAN

TOTAL

5600

TOTAL

DEPT

8750

TOTAL

DEPT

10875



29025

CLERK

4150

ANALYST

6000

MANAGER

8275

SALESMAN

5600

PRESIDENT

5000

8750

CLERK

1300

MANAGER

2450

PRESIDENT

5000

10875

CLERK

1900

ANALYST

6000

MANAGER

2975

9400

CLERK

MANAGER

2850

SALESMAN

5600

Этот отчет включает сумму всех заработных плат по DEPTNO и JOB (для каждой должности по отделам), сумму всех заработных плат по DEPTNO (по отделам), сумму всех заработных плат по JOB (по должностям) и, наконец, общую сумму заработных плат (сумму всех заработных плат таблицы EMP). Уровни агрегации должны быть четко обозначены. Для каждого значения должно быть точно определено, к какой категории оно относится (т. е. представляет ли данное значение столбца SAL сумму по DEPTNO? По JOB? Общую сумму?) Требуется получить следующее результирующее множество:

DEPTNO JOB SAL DEPTNO SUBTOTALS JOB SUBTOTALS

29025

30 TOTAL BY DEPT 9400

GRAND TOTAL FOR TABLE 29025

Как выявить строки, в которых представлены не подсуммы

Задача

При создании отчета использовалось расширение CUBE оператора GROUP BY. Как отличить строки, сформированные обычным оператором GROUP BY, и строки, являющиеся результатом выполнения CUBE или ROLLUP?

Ниже представлено результирующее множество, возвращаемое запросом, в котором для анализа заработных плат таблицы EMP используется расширение CUBE оператора GROUP BY:



1 ... 152 153 154 [ 155 ] 156 157 158 ... 219

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