Witam.
Mam takie polecenie:
- Planowana jest zmiana struktury organizacyjnej w firmie. Napisz program w języku Transact-SQL, który przeprowadzi odpowiednie modyfikacje. Zmieniony zostanie system numeracji działów z 10, 20, 30... na 1, 2, 3... Jeżeli dwa działy mają tą samą lokalizację, to zostaną one połączone, a dział powstały w wyniku połączenia będzie miał numer taki, jak mniejszy z istniejących numerów (Uwaga: W bazie nie ma działów o tej samej lokalizacji. Aby przetestować program, dodaj takie działy). Pensje wszystkich pracowników zostaną zmodyfikowane. Każdy z pracowników będzie zarabiał tyle, ile wynosi średnia w jego dziale (po reorganizacji) na jego stanowisku.
Na razie chcę zrobić 1 część zadania czyli:
Zmieniony zostanie system numeracji działów z 10, 20, 30... na 1, 2, 3...
Mój kod:
CREATE PROCEDURE zmiana_struktury
AS BEGIN
DECLARE kursor_dept CURSOR FOR select deptno, dname, loc from DEPT
DECLARE @id int, @deptno int
DECLARE @dname varchar(30), @loc varchar(30)
SET @id = 1
OPEN kursor
FETCH NEXT FROM kursor INTO @deptno, @dname, @loc
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE dept
SET deptno = @id,
@id = @id + 1
WHERE dname = @dname
END
CLOSE kursor_dept
DECLARE kursor_emp CURSOR FOR select empno, deptno from EMP
--?
DEALLOCATE kursor
END
Problem jest w tym, że wiem jak zmienić deptno w tabeli DEPT, ale jak to zrobić w tabeli EMP ? Myślałem o CASE np.
CASE deptno
WHEN 10 THEN 1
WHEN 20 THEN 2
.........
Jednak to ma tylko sens dla małej ilości deptno. Jakieś pomysły, sugestie? W załącznikach są screeny dwóch tabel EMP i DEPT.
Będę wdzięczny.