01. november 2007 - 13:59
#3
Jeg lavede engang en lille demo til et andet spm.:
CREATE TABLE eks1 (
fpk INTEGER NOT NULL PRIMARY KEY,
fval VARCHAR(25)
)
GO
INSERT INTO eks1 VALUES (1, '-')
GO
INSERT INTO eks1 VALUES (2, '-')
GO
INSERT INTO eks1 VALUES (3, '-')
GO
INSERT INTO eks1 VALUES (4, '-')
GO
INSERT INTO eks1 VALUES (5, '+')
GO
INSERT INTO eks1 VALUES (6, '+')
GO
INSERT INTO eks1 VALUES (7, '+')
GO
INSERT INTO eks1 VALUES (8, '+')
GO
INSERT INTO eks1 VALUES (9, '+')
GO
INSERT INTO eks1 VALUES (10, '+')
GO
INSERT INTO eks1 VALUES (11, '-')
GO
INSERT INTO eks1 VALUES (12, '-')
GO
INSERT INTO eks1 VALUES (13, '-')
GO
INSERT INTO eks1 VALUES (14, '-')
GO
INSERT INTO eks1 VALUES (15, '-')
GO
SELECT TOP 5 * FROM eks1 WHERE fpk NOT IN (SELECT TOP 5 fpk FROM eks1 ORDER BY fpk) ORDER BY fpk
GO
DROP TABLE eks1
GO
CREATE TABLE eks2 (
fpk INTEGER NOT NULL IDENTITY(1,1) PRIMARY KEY,
fnonpk INTEGER,
fval VARCHAR(25)
)
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (1, '-')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (1, '-')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (1, '-')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (1, '-')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (2, '?')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (3, '-')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (3, '-')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (3, '-')
GO
INSERT INTO eks2 (fnonpk, fval) VALUES (3, '-')
GO
SELECT TOP 5 * FROM eks2 WHERE fnonpk NOT IN (SELECT TOP 5 fnonpk FROM eks2 ORDER BY fnonpk) ORDER BY fnonpk
GO
SELECT * FROM (SELECT TOP 5 * FROM (SELECT TOP 10 * FROM eks2 ORDER BY fnonpk) x ORDER BY fnonpk DESC) y ORDER BY fnonpk
GO
DROP TABLE eks2
GO
07. marts 2008 - 23:21
#5
Hvis man tager udgangspunkt i arne_v's eks1 tabel, kan man også benytte en cte, som performer ret godt:
WITH Limit_CTE
AS
(
SELECT
fpk,
fval,
ROW_NUMBER() OVER(ORDER BY fpk) AS RowNumber
FROM eks1
)
SELECT fpk, fval
FROM Limit_CTE
WHERE RowNumber BETWEEN 5 AND 10