Sto tentando di ordinare una query specifica prendendo in considerazione i record successivi e precedenti, ma non riesco a ottenere il risultato. Vorrei ordinare per un numero e una lettera, ma se, per esempio, l'ultima lettera del numero 1 è uguale a una delle lettere del numero 2, voglio cambiare l'ordine, in modo che la lettera corrisponda al seguente disco.Ordinamento basato sui record successivi e precedenti in SQL
Create script and SQL fiddle demo
create table Parent (
id [bigint] IDENTITY(1,1),
number bigint NOT NULL,
PRIMARY KEY (id)
)
GO
create table Child (
id [bigint] IDENTITY(1,1),
parentId BIGINT,
letter VARCHAR(1) NOT NULL,
PRIMARY KEY (id),
UNIQUE (parentId, Letter),
FOREIGN KEY (parentId) REFERENCES Parent(id)
)
GO
INSERT Parent (number) VALUES (1)
INSERT Parent (number) VALUES (2)
INSERT Parent (number) VALUES (3)
INSERT Child (parentId, letter) VALUES (1, 'A')
INSERT Child (parentId, letter) VALUES (1, 'C')
INSERT Child (parentId, letter) VALUES (2, 'B')
INSERT Child (parentId, letter) VALUES (2, 'C')
INSERT Child (parentId, letter) VALUES (3, 'B')
INSERT Child (parentId, letter) VALUES (3, 'D')
interrogazione attuale
Attualmente sto ordinamento con questa query:
SELECT P.number, C.letter
FROM Child C
JOIN Parent P ON C.parentId = P.id
ORDER BY P.number, C.letter
risultato corrente impostato
0.123.516,41 milanumber letter
-------------------- ------
1 A
1 C
2 B
2 C
3 B
3 D
Risultato atteso set
Per chiarire quello che realmente voglio fare, qui è il set di risultati attesi (con C e B del numero 2 acceso).
number letter
-------------------- ------
1 A
1 C
2 C --switched
2 B --switched
3 B
3 D
Altri requisiti e mettere in discussione
- Si deve lavorare in SQL Server 2005.
- C'è uno scenario in cui vengono utilizzate 3 lettere per numero, sono contento se utilizza solo la corrispondenza migliore.
- In realtà mi interessano anche le soluzioni per le versioni successive di SQL Server (per l'apprendimento), ma quelle non rispondono alla mia domanda.
Qualcuno può indicarmi la giusta direzione su come farlo?
Si prega di consultare questa domanda per un nuovo scenario che mi è venuta in mente, dai commenti sulla risposta accettata: http://stackoverflow.com/questions/30480504/complex-sorting-based-on- next-and-previous-records-in-sql –