Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
21
Добавлен:
05.06.2015
Размер:
385 Кб
Скачать

14 Rows selected.

Q1_24b Формирование отчета, в котором содержимое столбца разворачивается в ряд столбцов отчета. Отчет должен содержать по строкам список сорудников (номера и имена служащих), по столбцам наименования отделов, а на пересечении знак ‘+’, если служащий работает в соответствующем отделе.

select empno, ename,

(select decode(deptno,10,' + ',NULL) from dept

where emp.deptno=dept.deptno) accounting,

(select decode(deptno,20,' + ',NULL) from dept

where emp.deptno=dept.deptno) research,

(select decode(deptno,30,' + ',NULL) from dept

where emp.deptno=dept.deptno) SALES,

(select decode(deptno,40,' + ',NULL) from dept

where emp.deptno=dept.deptno) OPERATIONS

from emp;

scott@8i>

EMPNO ENAME ACCOUNTING RESEARCH SALES OPERATIONS

---------- ---------- ----------- ----------- ----------- -----------

7369 SMITH +

7499 ALLEN +

7521 WARD +

7566 JONES +

7654 MARTIN +

7698 BLAKE +

7782 CLARK +

7788 SCOTT +

7839 KING +

7844 TURNER +

7876 ADAMS +

7900 JAMES +

7902 FORD +

7934 MILLER +

14 Rows selected.

Q1_24c А теперь усложним вывод отчета. На пересечении строк (сотрудников) и столбцов(названий отдела) надо выставить зарплату сотрудника в этом отделе.

Сначала создадим представление:

create or replace view my_rep1 as

select empno, ename,sal salary,

(select decode(deptno,10,'1',NULL) from dept

where emp.deptno=dept.deptno) accounting,

(select decode(deptno,20,'1',NULL) from dept

where emp.deptno=dept.deptno) research,

(select decode(deptno,30,'1',NULL) from dept

where emp.deptno=dept.deptno) SALES,

(select decode(deptno,40,'1',NULL) from dept

where emp.deptno=dept.deptno) OPERATIONS

from emp;

scott@8i> select * from my_rep1;

EMPNO ENAME SALARY A R S O

---------- ---------- ---------- - - - -

7369 SMITH 800 1

7499 ALLEN 1600 1

7521 WARD 1250 1

7566 JONES 2975 1

7654 MARTIN 1250 1

7698 BLAKE 2850 1

7782 CLARK 2450 1

7788 SCOTT 3000 1

7839 KING 5000 1

7844 TURNER 1500 1

7876 ADAMS 1100 1

7900 JAMES 950 1

7902 FORD 3000 1

7934 MILLER 1300 1

14 rows selected.

Затем на основе представления сформируем отчет:

select EMPNO,ENAME,

SALARY* nvl(to_number(accounting),NULL) accounting,

SALARY* nvl(to_number(research),NULL) research,

SALARY* nvl(to_number(sales),NULL) sales,

SALARY* nvl(to_number(operations),NULL) operations

from my_rep1;

EMPNO ENAME ACCOUNTING RESEARCH SALES OPERATIONS

---------- ---------- ---------- ---------- ---------- ----------