Welcome to Sign in | Help

Re: Verificare facuta cat mai simplu/optimizat

  •  03-16-2009, 10:21 PM

    Re: Verificare facuta cat mai simplu/optimizat

    Dacă vrei să îţi arate doar depozitele în care se găsesc toate produsele din respectiva comandă, atunci poţi folosi ceva de genul:

     

    CREATE TABLE Depozite (ID_Depozit int PRIMARY KEY)

    GO

    CREATE TABLE DetaliiComanda (

          ID_Comanda int,

          ID_Produs int,

          CantitateComanda int NOT NULL,

          PRIMARY KEY (ID_Comanda, ID_Produs)

    )

    GO

    CREATE TABLE DetaliiStoc (

          ID_Depozit int REFERENCES Depozite,

          ID_Produs int,

          CantitateStoc int NOT NULL,

          PRIMARY KEY (ID_Depozit, ID_Produs)

    )

    GO

    INSERT INTO Depozite VALUES (1)

    INSERT INTO Depozite VALUES (2)

    INSERT INTO Depozite VALUES (3)

    GO

    INSERT INTO DetaliiComanda VALUES (1,10,100)

    INSERT INTO DetaliiComanda VALUES (1,11,250)

    INSERT INTO DetaliiComanda VALUES (1,12,300)

    GO

    INSERT INTO DetaliiStoc VALUES (1,10,10)

    INSERT INTO DetaliiStoc VALUES (1,11,10)

    INSERT INTO DetaliiStoc VALUES (1,12,10)

    INSERT INTO DetaliiStoc VALUES (2,10,1000)

    INSERT INTO DetaliiStoc VALUES (2,11,2000)

    INSERT INTO DetaliiStoc VALUES (3,10,200)

    INSERT INTO DetaliiStoc VALUES (3,11,500)

    INSERT INTO DetaliiStoc VALUES (3,12,3000)

     

    DECLARE @ID_Comanda int

    SET @ID_Comanda=1

     

    SELECT ID_Depozit FROM Depozite d

    WHERE NOT EXISTS (

      SELECT * FROM DetaliiComanda c

      LEFT JOIN DetaliiStoc s

        ON c.ID_Produs=s.ID_Produs

        AND s.ID_Depozit=d.ID_Depozit

      WHERE c.ID_Comanda=@ID_Comanda

        AND ISNULL(s.CantitateStoc,0)<=c.CantitateComanda

    )

     

     

    Răzvan

View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems