Ciao,
ho questa tabella:
CREATE TABLE [dbo].[SAN_CRT_DOCUMENTI](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[SessionId] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[IdTesta] [decimal](10, 0) NOT NULL,
[IdRiga] [int] NOT NULL,
[Posizione] [int] NOT NULL,
CONSTRAINT [PK_SAN_CRT_DOCUMENTI] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Popolo la tabella con dati di esempio:
INSERT INTO SAN_CRT_DOCUMENTI(SessionId, IdTesta, IdRiga, Posizione)
VALUES ('0123456789', 100, 1, 1)
INSERT INTO SAN_CRT_DOCUMENTI(SessionId, IdTesta, IdRiga, Posizione)
VALUES ('0123456789', 100, 2, -2)
INSERT INTO SAN_CRT_DOCUMENTI(SessionId, IdTesta, IdRiga, Posizione)
VALUES ('0123456789', 100, 2, -1)
INSERT INTO SAN_CRT_DOCUMENTI(SessionId, IdTesta, IdRiga, Posizione)
VALUES ('0123456789', 100, 2, 1)
INSERT INTO SAN_CRT_DOCUMENTI(SessionId, IdTesta, IdRiga, Posizione)
VALUES ('0123456789', 100, 2, 2)
INSERT INTO SAN_CRT_DOCUMENTI(SessionId, IdTesta, IdRiga, Posizione)
VALUES ('0123456789', 100, 2, 3)
INSERT INTO SAN_CRT_DOCUMENTI(SessionId, IdTesta, IdRiga, Posizione)
VALUES ('0123456789', 101, 1, -2)
INSERT INTO SAN_CRT_DOCUMENTI(SessionId, IdTesta, IdRiga, Posizione)
VALUES ('0123456789', 101, 1, -1)
INSERT INTO SAN_CRT_DOCUMENTI(SessionId, IdTesta, IdRiga, Posizione)
VALUES ('0123456789', 101, 1, 1)
INSERT INTO SAN_CRT_DOCUMENTI(SessionId, IdTesta, IdRiga, Posizione)
VALUES ('0123456789', 101, 1, 2)
Query di selezione:
SELECT SessionId, IdTesta, IdRiga, Posizione
FROM SAN_CRT_DOCUMENTI
ORDER BY IdTesta, IdRiga, Posizione
Risultato:
0123456789 100 1 1
0123456789 100 2 -2
0123456789 100 2 -1
0123456789 100 2 1
0123456789 100 2 2
0123456789 100 2 3
0123456789 101 1 -2
0123456789 101 1 -1
0123456789 101 1 1
0123456789 101 1 2
Quello che vorrei ottenere è un ordinamento diverso da quanto ottenuto. Vorrei mantenere l'ordinamento per IdTesta e IdRiga, e aggiungere l'ordinamento per Posizione in modo da avere prima tutti i numeri positivi (1, 2, 3) e poi quelli negativi (-1, -2, -3).
Per intenderci il risultato della select dovrebbe essere questo:
0123456789 100 1 1
0123456789 100 2 1
0123456789 100 2 2
0123456789 100 2 3
0123456789 100 2 -1
0123456789 100 2 -2
0123456789 101 1 1
0123456789 101 1 2
0123456789 101 1 -1
0123456789 101 1 -2
Ho già fatto alcuni tentativi, come creare in select un campo extra (PosizioneOrdinamento) che facevo diventare Z + il numero * -1 quando il campo Posizone era negativo, ma in questo modo il campo diventa testuale e l'ordinamento non è più corretto.
Potrei utilizzare un numero alto da sommare al numero negativo reso positivo. In questo modo funziona, ma non credo sia la soluzione migliore.
Attendo quindi un vostro consiglio, e ringrazio in anticipo.
Carlo.