Newsgroup: it.comp.appl.access
Titolo: Per favore aiutatemi sui campi <NULL>...!

Ciao a tutti,
ho un problema urgente da risolvere ammesso che si possa...
Faccio una SELECT su un LEFT JOIN di due tabelle, ed essendo LEFT avro' a
sinistra tutti i valori, e a destra diversi <NULL> dove non ho un valore
corrispondente:
Davide     1
Daniele    23
Dino        <NULL>
Dori        41
Duilio       <NULL>
Se questa SELECT e' seguita da un ORDER BY (campo numerico) ottengo:
Dino     <NULL>
Duilio    <NULL>
Davide    1
Daniele    23
Dori        41
Io NON vorrei quei campi con <NULL> in testa all'ordinamento, ma li vorrei
alla fine... qualcosa del tipo:
Davide    1
Daniele    23
Dori        41
Dino     <NULL>
Duilio    <NULL>
E' possibile mantendo piu' o meno la struttura della mia query (SELECT...
FROM... LEFT JOIN... ORDER BY...)?
Oppure come potrei fare?
Grazie.

 ha scritto nel messaggio
news:qV5yc.102997$Qc.39...@twister1.libero.it...

Ciao,
devi solo cambiare l'order by, ti scrivo solo quella perchè il resto della
query non ha importanza.
Ammettiamo che i tuoi campi da ordinare si chiamano [Nome] e [Numero]
------------------
ORDER BY IIF(IsNull([Numero]),1,0),Numero,Nome
------------------
(a stesso numero ordino per nome)
Ciao Giorgio

 (a stesso numero ordino per nome)
Non capisco bene questa espressione, a me non interessa Nome, ma solo
ordinare tutti i numeri in ordine crescente, con in fondo tutti i NULL,
ordinati o disordinati che siano, l'importante e' che siano in fondo!
Purtroppo io sto usando SQL Server, e mi dice che IsNull richiede due
argomenti...
Come dovrei modificare la cosa?
Grazie mille.

 ha scritto nel messaggio
news:Nd6yc.103017$Qc.39...@twister1.libero.it...

----------------------------
ORDER BY  CASE WHEN [Numero] IS NULL
                                 THEN 1 ELSE 0 END,
                                 [Numero]
----------------------------
Ciao Giorgio

 ----------------------------
Ciao Giorgio,
non capisco bene cosa vuol dire 1 e 0, e mi piacerebbe comunque che me lo
spiegassi, anche se credo di aver trovato un metodo piu' semplice... proprio
guardando la documentazione di ISNULL:
SELECT TOP 100 Table.id AS id, ISNULL(Table.num1, 100) AS num1, ... FROM ...
LEFT JOIN ... ORDER BY num1;
Che ne dici? Puo' andare?
A me sembra di si!
Grazie...

 ha scritto nel messaggio
news:d8eyc.103309$Qc.39...@twister1.libero.it...

Ciao,
Se il tuo campo num1 non supera il valore 100 va bene anche la tua
soluzione, quella da me suggerita funziona in qualsiasi circostanza.
E' molto semplice, l'ordinamento viene effettuato su due campi, il primo che
è un campo calcolato assume il valore 0 se num1 non è Null e al contrario
assume 1 se num1 è NULL.
Sarebbe come avere questa tabella dove x è il campo calcolato
x   Nome      Num1
------------------------
0  Davide     1
0  Daniele    23
1  Dino        <NULL>
0  Dori        41
1  Duilio       <NULL>
------------------------
e ordinandola per x e Num1 .....
------------------------
0  Davide     1
0  Daniele    23
0  Dori        41
1  Dino        <NULL>
1  Duilio       <NULL>
------------------------
Ciao Giorgio

 ------------------------
Si l'avevo capito appena letta un'altra risposta che mi consigliava la
stessa cosa... ti ringrazio perché la tua soluzione e' veramente generale,
ma come dici tu la mia puo' anche andare perche' essndo 100 elementi
selezionati quel numero non andra' mai sopra a 100!
Grazie ancora.