Welcome to Sign in | Help

Re: sql mobile records

  •  12-20-2007, 11:43 AM

    Re: sql mobile records

    O posibila solutie (daca se doreste filtrarea/paginarea inregistrarilor de catre SQL Server) presupune un "self-inner-join" (joncţiune reflexivă ?) daca setul de înregistrări are o cheie primară sau o cheie cu valori unice şi nenule (nonnule) ca în exemplul următor în care tabela Produs are cheia primară IDProdus:

     

    CREATE TABLE Produs

    (

    IDProdus UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY,

    Denumire VARCHAR(25) NOT NULL,

    StocMin  MONEY NULL

    )

    GO

     

    INSERT INTO Produs(Denumire,StocMin) VALUES ('A',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('B',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('C',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('D',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('E',10)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('F',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('G',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('H',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('AA',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('BB',5)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('CC',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('DD',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('EE',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('FF',3)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('GG',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('HH',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('AAA',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('BBB',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('CCC',11)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('DDD',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('EEE',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('FFF',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('GGG',100)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('HHH',NULL)

    INSERT INTO Produs(Denumire,StocMin) VALUES ('AAAA',NULL)

    GO

    --SELECT COUNT(*) FROM Produs

     

    --pagina 2: 17 -> 24

    SELECT Q3.NrCrt, Produs.*

    FROM

    (

    SELECT COUNT(*) AS NrCrt, Q1.IDProdus

    FROM

          (SELECT IDProdus FROM Produs) AS Q1

          INNER JOIN (SELECT IDProdus FROM Produs) AS Q2

          ON Q1.IDProdus >= Q2.IDProdus

    GROUP BY Q1.IDProdus

    HAVING COUNT(*) BETWEEN (16+1) AND 24

    ) AS Q3 INNER JOIN Produs ON Q3.IDProdus = Produs.IDProdus

    ORDER BY Q3.NrCrt

     

    --pagina 3: 25 -> 32

    SELECT Q3.NrCrt, Produs.*

    FROM

    (

    SELECT COUNT(*) AS NrCrt, Q1.IDProdus

    FROM

          (SELECT IDProdus FROM Produs) AS Q1

          INNER JOIN (SELECT IDProdus FROM Produs) AS Q2

          ON Q1.IDProdus >= Q2.IDProdus

    GROUP BY Q1.IDProdus

    HAVING COUNT(*) BETWEEN (24+1) AND 32

    ) AS Q3 INNER JOIN Produs ON Q3.IDProdus = Produs.IDProdus

    ORDER BY Q3.NrCrt

     

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