Newsgroup: it.comp.lang.visual-basic
Titolo: [OT] Help SQL order by

Ciao a tutti, scusate l'ot :)
Ho una tabella fatta cosě:
CONTATORE,DATA,CDARE,CAVERE,IMPORTO
1,01/01/2001,C001,Null,10.22
2,01/01/2001,C002,Null,9.99
3,02/01/2001,Null,C001,50.22
4,05/01/2001,C002,Null,9.99
Io dovrei tirarmi fuori una stringa sql che mi restituisca i record
nell'ordine 1,3,2,4, cioč ordinato per:
CDARE or CAVERE e poi per DATA
L'unica cosa che mi viene in mente č fare una colonna in cui metto il CDARE
o il CAVERE (uno dei due č SEMPRE NULL), e fare l'order per quella tipo:
CONTATORE,DATA,CDARE,CAVERE,IMPORTO,FLAG
1,01/01/2001,C001,Null,10.22,C001
2,01/01/2001,C002,Null,9.99,C002
3,02/01/2001,Null,C001,50.22,C001
4,05/01/2001,C002,Null,9.99,C002
Quindi potrei fare un semplice order by FLAG,DATA.
C'č qualche alternativa SQL che non conosco per ordinare in questo modo?
Uso interbase e non dovrebbe supportare IF o roba simile come sintassi.
Grazie

 Uso interbase e non dovrebbe supportare IF o roba simile come sintassi.
Lo standard prevede il supporto di COALESCE.
Alcuni dbms non rispettano lo standard e supportano solo ISNULL, ma nel 
tuo caso non cambia niente.
...
ORDER BY COALESCE(CDARE,CAVERE,'---'), DATA
Ciao
Alberto
-- 
Si è visto di meglio,
ma si è scopato di peggio,
qualche volta a pago
e non erano neanche sempre donne
[Paolo]

 ORDER BY COALESCE(CDARE,CAVERE,'---'), DATA
Firebird lo supporta ma non in order by mi sa...
Questo mi funge:
select COALESCE("AVERECLIFOR","DARECLIFOR")
from FCONTABRCONT
Ma questo no:
select "AVERECLIFOR","DARECLIFOR"
from FCONTABRCONT
order by COALESCE("AVERECLIFOR","DARECLIFOR")
Da errore
|  ISC ERROR CODE:335544569
|  
|  ISC ERROR MESSAGE:
|  Dynamic SQL Error
|  SQL error code = -104
|  Token unknown - line 3, char 33
|  ASC
Qualche idea?
Grazie 

Prova con:
SELECT COALESCE(CDARE, CAVERE) AS C
FROM ...
ORDER BY C
-- 
Quando noi ignoranti eravamo di più, tutto era più bello...
(A. Celentano)
Per rispondermi in privato, togli prima l'immondizia dalla testa ;)

 ORDER BY C
Che è quello che diceva lui stesso nel post iniziale...


 ORDER BY C
In questo esempio anche ORDER BY 1 dovrebbe andare...

 Che è quello che diceva lui stesso nel post iniziale...
Ho risolto semplicemente, dato che il problema si è semplificato.
In pratica controllo se c'è un CODDARE e inserisco un record in una tabella
temporanea, se c'è anche un CODAVERE ne inserisco un'altro.
In questo modo mi è bastato aggiungere un campo alla tabella temporanea in
cui metto questo codice, indipendentemente da dove viene.
In questo modo posso fare la order by.
Avevo anche il problema di stampare un valore che era il saldo dipendente
dal record precedente. In pratica era saldo=saldo+importo.
Cambiando l'ordine dei record non potevo calcolarmelo da VB nella stampa
temporanea, ma sono riuscito a farlo direttamente nel report. Quindi posso
inserire i record nella tabella temporanea in qualsiasi ordine senza
preoccuparmi.
Cmq grazie, quel coalesce anche in fase di select mi fa molto comodo, anche
perchè mi ha fatto trovare un sacco di altre funzioni sql supportate da
firebird :)

 preoccuparmi.
Anche perchè l'ordine di inserimento dei record in una tabella 
temporanea non determina l'ordine con cui saranno estratti...
Ciao


 temporanea non determina l'ordine con cui saranno estratti...
No, ma comunque avevano la stessa order by (apparte quel problema di fare
col coalesce).
Ora ho la mia order by nel report dove mi calcolo il saldo in real time :P

 Ora ho la mia order by nel report dove mi calcolo il saldo in real time
Ecco, quella sì.


 proprio una pratica da evitare.
Capito :)
In ogni caso la order by nel mio caso se la ciuccia il server, quindi
cavoli suoi ^_^

 cavoli suoi ^_^
Da questo punto di vista, potresti anche schedulare un centinaio di 
query, random, ogni secondo.
Tanto, ci pensa il server...
