Recap It Ula Recurs c

4
1 RECAPITULARE EXAMEN Aveti la dispozitie urmatoarea bază de date: 1. ADAUGATI TABELUL Concedii tinand cont ca pentru fiecare concediu se cunosc: DataPlecare, Numar zile, TipConcediu. Un angajat poate sa solicite mai multe concedii de odihna. Data plecare si numarul de zile trebuie obligatoriu completate. CREATE TABLE CONCEDII (IdConcediu int identity primary key, Data date NOT NULL, NumarZile int NOT NULL, CodAngajat bigint FOREIGN KEY REFERENCES Angajati(CodAngajat) ) 2. Adaugati o restrictie pentru salariul din tabelul Angajati pentru a nu permite valori peste 2000.

description

knlknl

Transcript of Recap It Ula Recurs c

  • 1

    RECAPITULARE EXAMEN

    Aveti la dispozitie urmatoarea baz de date:

    1. ADAUGATI TABELUL Concedii tinand cont ca pentru fiecare concediu se cunosc: DataPlecare, Numar

    zile, TipConcediu.

    Un angajat poate sa solicite mai multe concedii de odihna. Data plecare si numarul de zile trebuie

    obligatoriu completate.

    CREATE TABLE CONCEDII (IdConcediu int identity primary key,

    Data date NOT NULL, NumarZile int NOT NULL,

    CodAngajat bigint FOREIGN KEY

    REFERENCES Angajati(CodAngajat) )

    2. Adaugati o restrictie pentru salariul din tabelul Angajati pentru a nu permite valori peste 2000.

  • 2

    ALTER TABLE ANGAJATI ADD CONSTRAINT PlafonSalarii CHECK (Salariu30)

    BEGIN

    RAISERROR ('ATI DEPASIT 30 DE ZILE', 1,1)

    ROLLBACK TRANSACTION

    END

    4. Realizati un View pentru a calcula un spor salarial de 100 lei pentru toti salariatii, iar pentru cei care au

    participat la mai mult de 10 aprovizionari sa se mai adauge 5% din salariu.

    5. Realizati o procedura stocata pentru a determina care sunt furnizorii dintr-o anumita tara (parametru)

    pentru care valoarea vanzarilor depaseste o anumita suma (parametru) prin parametru, dupa

    1.1.2007.

    CREATE PROC ListaFz

    @tara nvarchar(20),

    @suma money

    as

    SELECT F.CODFZ, NUMEFZ,

    SUM(CANTITATE*PRETUNITAR) AS TOTAL

    FROM FURNIZORI F INNER JOIN APROV ON F.CODFZ=APROV.CODFZ

    WHERE TARA=@TARA AND DATAAP>'01/01/2007'

    GROUP BY f.CODFZ, NUMEfz

    HAVING SUM(CANTITATE*PRETUNITAR)>@SUMA

    6. Realizati o procedura pentru a clasifica furnizorii dupa valoarea vanzarilor (descrescator). Apoi,

    selectati doar acei furnizori care se incadreaza intre primii 10 si, de la care s-au primit aprovizionari in

    2007 sau 2008.

  • 3

    Se va utiliza tehnica CTE pentru realizarea clasamentului.

    CREATE PROC FURNIZORI_DUPA_VANZARI AS

    WITH LISTA(CODFZ, NUMEFZ, TOTAL, CLASAMENT) AS

    (SELECT FURNIZORI.CODFZ, NUMEFZ, SUM(CANTITATE*PRETUNITAR), ROW_NUMBER() OVER

    (ORDER BY SUM(CANTITATE*PRETUNITAR) DESC)

    FROM FURNIZORI INNER JOIN APROV ON FURNIZORI.CODFZ=APROV.CODFZ GROUP

    BY FURNIZORI.CODFZ, NUMEFZ)

    SELECT DISTINCT NUMEFZ, CLASAMENT FROM

    LISTA INNER JOIN APROV ON LISTA.CODFZ=APROV.CODFZ

    WHERE CLASAMENT

  • 4

    TOTALFZ MONEY, PONDERE MONEY)

    AS

    BEGIN

    DECLARE @TOTALLUNA AS MONEY

    SET @TOTALLUNA=(SELECT SUM(CANTITATE*PRETUNITAR)

    FROM APROV WHERE YEAR(DATAAP)=@AN AND

    MONTH(DATAAP)=@LUNA)

    INSERT INTO @TABEL

    SELECT F.CODFZ, NUMEFZ, SUM(CANTITATE*PRETUNITAR),

    SUM(CANTITATE*PRETUNITAR)/@TOTALLUNA

    FROM APROV A INNER JOIN FURNIZORI F ON A.CODFZ=F.CODFZ

    WHERE YEAR(DATAAP)=@AN AND

    MONTH(DATAAP)=@LUNA

    GROUP BY F.CODFZ, NUMEFZ

    RETURN

    END

    9. Utilizati functia intr-o procedura care sa afiseze care sunt furnizorii cu pondere mai mare de 8%

    din valoarea totala aprovizionata in ianuarie 2008.

    CREATE PROC AF_FZ

    SELECT *

    FROM DBO.FURNIZORIAPROV (2008,1)

    WHERE PONDERE>0.08