2016-07-18 8 views
2

SQL-Abfrage für die Auswahl von SequenznummernSQL-Abfrage für die Auswahl von Sequenznummern

Im SQL-Server möchte ich Zeilen basierend auf Sequenznummern auswählen. Zum Beispiel habe ich Daten wie folgt:

ID RowNos 
A 1 
B 2 
X NULL 
C 4 
D 5 
Y NULL 
E 7 
F 8 
G 9 
H 11 
I 13 

Abfrage zurückgeben sollte

ID NextID 
A B  -- Since RowNos 1,2 is in sequence 
C D  -- Since RowNos 4,5 is in sequence 
E G  -- Since RowNos 7,8,9 is in sequence 

ich nicht Idee, diese Abfrage zu starten haben. Sonst werde ich auch meine Verhandlung veröffentlichen.

+1

Ihr Beispiel mir etwas unklar erscheint. Sehen Sie sich die Reihenfolge von 'ID' oder' RowNos' an - wenn letzteres garantiert ist, dass sie eindeutig sind und sequentiell sein werden, bis auf das dazwischen liegende 'NULL'? Welche Version von SQL Server? –

+0

@MartinSmith, ich möchte die ID und Next ID basierend auf der Sequenz abrufen. Zum Beispiel ist 1,2 die Sequenz, weil 3 fehlt. So A (1) ist die ID und B (2) ist die nächste ID. –

+1

Ist RowNos für Nicht-Null-Werte eindeutig? Welche Version von SQL Server? –

Antwort

3
DECLARE @t TABLE (ID CHAR(1), RowNos INT) 
INSERT INTO @t 
VALUES 
    ('A', 1), ('B', 2), ('X', NULL), 
    ('C', 4), ('D', 5), ('Y', NULL), 
    ('E', 7), ('F', 8), ('G', 9), 
    ('H', 11), ('I', 13) 

SELECT MIN(ID), MAX(ID) 
FROM (
    SELECT *, rn = ROW_NUMBER() OVER (ORDER BY RowNos) 
    FROM @t 
) t 
WHERE RowNos IS NOT NULL 
GROUP BY RowNos - rn 
HAVING MIN(ID) != MAX(ID) 

Ausgang:

---- ---- 
A B 
C D 
E G 
0

, um sie auszuwählen bestellt sollte wie etwas sein:

SELECT * FROM table_name WHERE RowNos IS NOT NULL ORDER BY RowNos ASC; 
+0

Nein. Das ist nicht, was ich erwartet habe .. –

Verwandte Themen