Ordinamento SELECT

martedì 18 settembre 2007 - 06.27

denis.basei Profilo | Senior Member

Buona mattina a tutti.

Vi spiego un mio problema con un esempio che allego. Vorrei che il recordset fosse ordinato seguendo la logica della clausole WHERE, vale a dire prima i siti dove il codice è maggiore di 0280100201, poi quelli dove è minore e poi quello uguale. Avevo usato tre select con la clausola UNION però mi ha dato dei problemi con la definizione del CommandBuilder per l'update. Qualcuno da suggerirmi una query alternativa?

Grazie

Denis

lbenaglia Profilo | Guru

>Vi spiego un mio problema con un esempio che allego.

Ciao Denis,

hai allegato un PDF
Non potresti gentilmente allegare un file .txt contenente il comando CREATE TABLE, alcune righe di prova (INSERT INTO), la query ed il risultato finale che vorresti ottenere con quei dati?

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

denis.basei Profilo | Senior Member

Sono un pò di fretta per cui ti allego il database. La tabella in questione è Magazzino01.


Grazie mille!


... il risultato che vorrei ottenere è quello di avere i records ordinati come nelle condizioni WHERE, riprendendo l'esempio iniziale dovrei avere
0280100301
0280100401
0280100101
0280100201

La query è questa:
SELECT Sito, QuotaX, QuotaY, IntervalloSettimane, BarCode, AltezzaSito, DataOraIngresso, DataOraUscita, IDStato, DescrizioneStato, SitoDestinazione,
QuotaX_SitoDestinazione, QuotaY_SitoDestinazione, IDTipologia
FROM Magazzino01
WHERE (Sito > '0280100201') AND (IDStato = 12) AND (IDTipologia = 2) OR
(Sito < '0280100201') AND (IDStato = 12) AND (IDTipologia = 2) OR
(Sito = '0280100201') AND (IDStato = 12) AND (IDTipologia = 2)

denis.basei Profilo | Senior Member

Ti ho aggiornato la risposta con alcuni dati che nella fretta avevo dimenticato.


Grazie

lbenaglia Profilo | Guru

>Sono un pò di fretta per cui ti allego il database.
Anch'io sono di fretta....
Io ti ho chiesto un piccolo esempio non TUTTO IL DATABASE!

Comunque... spiegami che senso ha quella clausola WHERE:

WHERE Sito > '0280100201' AND IDStato = 12 AND IDTipologia = 2 OR Sito < '0280100201' AND IDStato = 12 AND IDTipologia = 2 OR Sito = '0280100201' AND IDStato = 12 AND IDTipologia = 2

Non sarebbe più corretto scrivere una banalissima:
WHERE IDStato = 12 AND IDTipologia = 2

Dato che non ho capito la tua clausola WHERE, non riesco ad immaginare come vuoi ordinare i dati...

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

denis.basei Profilo | Senior Member

E' proprio qui il nocciolo del discorso. Io vorrei ottenere un recordset dove prima ho i records dove Sito > 0280100201, poi i records con Sito < e per ultimo quello uguale... il tutto con una sola query, se possibile. Inizialmente avevo fatto 3 select unite dalla clausola UNION, poi ho modificato la query con delle clausole WHERE.


Ciao



lbenaglia Profilo | Guru

>E' proprio qui il nocciolo del discorso. Io vorrei ottenere un
>recordset dove prima ho i records dove Sito > 0280100201,
>poi i records con Sito < e per ultimo quello uguale... il
>tutto con una sola query, se possibile.

Una soluzione potrebbe essere la seguente:

SELECT Sito FROM dbo.Magazzino01 WHERE IDStato = 12 AND IDTipologia = 2 ORDER BY CASE WHEN Sito > '0280100201' THEN 1 WHEN Sito < '0280100201' THEN 2 ELSE 3 END; /* Output: Sito ---------- 0280100301 0280100401 0280100101 0280100201 (4 row(s) affected) */

Tieni presente che eventuali indici definiti sulla colonna Sito non verranno presi in considerazione...

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5