/ / ColdFusion (Railo) QoQ - Nulls Last - coldfusion, railo, cfml, qoq

ColdFusion (Railo) QoQ - Nulls Last - coldfusion, railo, cfml, qoq

La mia comprensione è questa nulls last non è possibile con QoQ. Come faccio a ingannare coldfusion nell'ordinamento dei valori nulli per ultimi se sto ordinando la riga in ordine crescente o decrescente?

Ho provato ad usare case nella parte SELECT e ORDER della query, ma sembra che CF non gli piaccia (funziona su railo)

risposte:

4 per risposta № 1

Potrebbero esserci opzioni migliori, ma un semplice truccoè aggiungere una colonna che rappresenta la priorità di ordinamento. Assegna i record con valori non nulli con una priorità più alta rispetto ai valori nulli. Quindi ordina semplicemente per primo il valore di priorità, poi qualsiasi altra colonna che desideri. Dal momento che i valori nulli hanno un numero di priorità inferiore, verranno sempre ordinati per ultimi.

    <!--- 1 - non-null values 2 - null values --->
SELECT 1 AS SortOrder, SomeColumn
FROM   theQuery
WHERE  SomeColumn IS NOT NULL
UNION ALL
SELECT 2 AS SortOrder, SomeColumn
FROM   theQuery
WHERE  SomeColumn IS NULL
ORDER BY SortOrder, SomeColumn ASC

(Vale la pena notare che probabilmente potresti fare qualcosa di simile nella tua query del database usando order by invece di union.)


2 per risposta № 2

QoQ sia su ColdFusion e Railo hanno un moltovocabolo SQL limitato, e non c'è nulla che si occupi di come collazionare null. Quindi, come suggerito da @Leigh, aggiungi un'altra colonna, senza alcun valore null, che rappresenta l'ordinamento desiderato.

O meglio, se possibile, gestisci tutto questo nel DB. Ovviamente questo non è sempre possibile (dato che il set di record che stai interrogando potrebbe non provenire da un DB in primo luogo ;-)


0 per risposta № 3

... c'era un altro modo, ma si basa sull'essere valori NULL e non vuoto "". Sto andando dalla memoria qui, ma questo è essenzialmente, usando || funziona solo se il valore non è nullo, quindi utilizzando prima i valori nulli decrittivi, ottengo i valori alla fine.

 <cfquery>
SELECT *, "1" || #sortCol# as isNull
FROM table
ORDER BY isNull desc, #sortCol#
</cfquery>

Nota Non sto realmente sostenendo l'uso di questo e non sono sicuro che CF lo gestirà allo stesso modo