DECLARE @myTable Table
(
N INT,
C CHAR(1),
D CHAR(1)
)
INSERT INTO @myTable(N,C,D) VALUES(1, 'x', 'a');
INSERT INTO @myTable(N,C,D) VALUES(2, 'x', 'b');
INSERT INTO @myTable(N,C,D) VALUES(3, 'x', 'c');
INSERT INTO @myTable(N,C,D) VALUES(4, 'x', 'd');
INSERT INTO @myTable(N,C,D) VALUES(6, 'x', 'e');
INSERT INTO @myTable(N,C,D) VALUES(7, 'x', 'f');
INSERT INTO @myTable(N,C,D) VALUES(8, 'y', 'g');
INSERT INTO @myTable(N,C,D) VALUES(9, 'y', 'h');
INSERT INTO @myTable(N,C,D) VALUES(10, 'y', 'i');
WITH StartingPoints AS(
SELECT A.*, ROW_NUMBER() OVER(ORDER BY A.N) AS rownum
FROM @myTable AS A
WHERE NOT EXISTS(
SELECT *
FROM @myTable B
WHERE B.C = A.C
AND B.N = A.N - 1
)
),
EndingPoints AS(
SELECT A.*, ROW_NUMBER() OVER(ORDER BY A.N) AS rownum
FROM @myTable AS A
WHERE NOT EXISTS (
SELECT *
FROM @myTable B
WHERE B.C = A.C
AND B.N = A.N + 1
)
)
SELECT StartingPoints.C,
StartingPoints.N AS [N1],
EndingPoints.N AS [N2],
StartingPoints.D AS [D1],
EndingPoints.D AS [D2]
FROM StartingPoints
JOIN EndingPoints ON StartingPoints.rownum = EndingPoints.rownum
Резултати :
C N1 N2 D1 D2
---- ----------- ----------- ---- ----
x 1 4 a d
x 6 7 e f
y 8 10 g i