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