2011-10-03 14 views
6

ho una tabella come questaOttenere e ordinare le righe con il valore maggiore di zero, allora le righe con valore zero

id title display_order 
1  t1  3 
2  t2  1 
3  t3  5 
4  t4  4 
5  t5  2 
6  t6  0 
7  t7  7 
8  t8  6 
9  t9  0 
10 t10  0 

Che cosa ho bisogno è di avere risultati come questo

id title display_order 
2  t2  1 
5  t5  2 
1  t1  3 
4  t4  4 
3  t3  5 
8  t8  6 
7  t7  7 
...order of the rest is not important but should be in the result 
6  t6  0 
9  t9  0 
10 t10  0 

posso ottenere questo risultato con due query SQL e quindi combinarle.

C'è un modo per farlo con un solo SQL?

Grazie

risposta

15
SELECT * 
FROM atable 
ORDER BY 
    display_order = 0, 
    display_order 

Quando display_order è 0, il primo termine di smistamento, display_order = 0, restituisce True, altrimenti restituisce False. True ordina dopo False - così, il primo criterio di ordinamento assicura che le righe con lo display_order di 0 siano ordinate alla fine dell'elenco.

Il secondo termine ORDER BY, display_order, specifica inoltre l'ordine per le righe con valori di ordine diversi da zero.

Pertanto, i due criteri forniscono l'ordinamento desiderato.

3

provare il seguito one

SELECT * FROM table_name 
ORDER BY IF (display_order = 0, 9999999, display_order) 
1

Ecco la soluzione in T-SQL nel caso qualcuno ha bisogno

SELECT * FROM Table ORDER BY CASE WHEN display_order = 0 THEN display_order END ASC,CASE WHEN display_order > 0 THEN display_order END ASC 
Problemi correlati