Newsgroup: it.comp.lang.visual-basic
Titolo: order by chi mi aiuta?

Ciao a tutti! sono in panne con una select semplice ma che mi sta dando
un po di problemi. Ho cercato nel forum ma non sono riuscito a trovare
la soluzione al mio problema.
Allora... sto facendo un programmino semplice che serve a gestire le
chiamate dei taxi in modo che si possa gestire l'ordine delle richieste
diciamo che se ho diverse prenotazioni di chiamata dei taxi,  il primo
che prenota è il primo che parte (ho usato la proprietà ASC e
funziona benissimo) indicizzando la query sui campi data e ora però...
nel caso io abbia 4 chiamate e le ultime due richiedano la prenotazione
per la partenza ad orario io dovrei avere la query che oltre ad
indicizzare le prenotazioni in base all'ordine di arrivo della
richiesta mi dovrebbe indicizzare anche in base all'ordine di ora di
partenza
N    DATA        ORA        RICHIEDENTE  TEL      TRASPORTATO   ORAPREN
      ESITO
1    14/01/07     8.00.00    ROSSI             1111     ROSSI
                            APERTA
2    14/01/07     8.06.00    BIANCHI          2222     BIANCHI
                          APERTA
3    14/01/97     8.07.00    VERDI             3333     VERDI
      12.30.00          APERTA
4    14/01/07     8.10.00    NERI               4444     NERI
         11.00.00         APERTA
in pratica, gli ultimi due record dovrebbero spostarsi di posto cosi:
3    14/01/07     8.10.00    NERI               4444     NERI
         11.00.00         APERTA
4    14/01/97     8.07.00    VERDI             3333     VERDI
      12.30.00          APERTA
morale: non riesco a trovare il modo giusto di scrivere la query! E non
so se ne devo fare una nidificata oppure due.
Mi aiutate per favore?
Grazie! Ciao a tutti!

so se ne devo fare una nidificata oppure due.
Ciao Giancarlo,
per l'order by puoi fare cosě
----
SELECT *
FROM Tabella
ORDER BY DATA,Iif(ISNULL(ORAPREN)=True,ORA,ORAPREN)
----
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

 per l'order by puoi fare cosě
ops..  ho dato per scontato che si parlasse di un Access database.
A seconda del tipo di database che usi cambia la funzione IIF con quella
messa a disposizione dal tuo Db engine.


 messa a disposizione dal tuo Db engine.
Ciao Giorgio, grazie per avermi risposto.
In effetti, per puro caso, sto usando MS Access mentre ultimamente mi
ero spostato verso mysql.
Provo a modificare la query e ti faccio sapere...
Grazie mille!!!

Eccomi! Allora... adesso funziona bene l'ordine delle ore della
prenotazione ma purtroppo si sono invertiti i record 1 e 2. In
pratica... sul primo record dovrebbe esserci la richiesta fatta alle
ore 0.33.48 come era prima della modifica.
Provo a smanettarci un po su...

 ha scritto nel messaggio
news:1168812974.9...@l53g2000cwa.googlegroups.com...

umm, dove sono le ore 0.33.48 nel tuo esempio di dati ?
facendo una prova con i soli campi significativi io ho questo risultato
----
N Data     Ora     OraPren
1 14/01/07 8:00:00
2 14/01/07 8:06:00
4 14/01/07 8:10:00 11:00:00
3 14/01/07 8:07:00 12:30:00
----


 umm, dove sono le ore 0.33.48 nel tuo esempio di dati ?
OPS!!! (stavolta lo dico io...) hai ragione perdonami... ti ho detto
uno degli orari che visualizzo sul mio PC..
Non capisco però come mai a te la sequenza dei record è esattamente
quella che io desidero mentre a me non funziona... provo a
verificare...
Grazie ancora!!! (sei mitico!)

 verificare...
In SQL standard dovrebbe essere così più o meno:
ORDER BY DATA,COALESCE(ORA,ORAPREN)
In pratica ordina per DATA, poi per il campo COALESCE, che non è altro che
il campo ORA, o il campo ORAPREN se il primo è Null.
-- 
DBMS Firebird
VB6 + Ado


Grazie anche a te Andrea... ma il dubbio che mi è venuto è causato
dal fatto che non ho fatto altro che copiare la query di Giorgio
(chiaramente variando e controllando i nomi dei campi) che a lui da
l'esito di cui ho bisogno mentre a me risulta non essere precisa. Potri
avere qualche 'settaggio' incorretto o una qualsiasi istruzione
all'interno del sorgente che 'sporca' la query... comunque questa sera
ci smanetto e Vi dico...
Grazie...

verificare...
Ciao Giancarlo,
prova a postare un esempio dei dati con i quali a te non funziona.
Una ragione ci deve essere
:-)


verificare...
aspetta...
sei sicuro che i campi ORA e ORAPREN sono di tipo data/ora ?



SI...  ecco la struttura della tabella:
data_chiamata                Data/ora
ora_chiamata                  Data/ora
richiedente                      Testo
interno                            Testo
trasportato                      Testo
tipo_pagamento               Testo
ora_prenotazione             Data/ora
esito_prenotazione          Testo
ed ecco la query:
Adodc1.RecordSource = "SELECT * FROM chiamate ORDER BY
data_chiamata,Iif(ISNULL(ora_prenotazione) = true, ora_chiamata,
ora_prenotazione)"