2011-05-31 8 views
5

Quiero tener mi tabla, rcarddet, ordenada por "SDNO" (clave no primaria) en orden ascendente con la excepción de "0". Por lo que debe llegar a ser como:ORDEN DE SQL POR consulta

1 
1 
2 
. 
. 
10 
0 
0 

Mi consulta ahora es:

SELECT * 
    FROM `rcarddet` 
WHERE `RDATE` = '2011-05-25' 
    AND `RCNO` = '1' 
    AND `PLACE` = 'H' 
    AND `SDNO` != 0 
ORDER BY `rcarddet`.`SDNO` ASC; 
+0

Se podría hacer algo como esto (no probado, obviamente, , No sé los detalles de su situación ... o si este tipo de cosas incluso funciona ... pero puede jugar con eso.) Esto debería establecer todo en cero como el valor máximo de SD NO y, por lo tanto, ponerlos al final 'SELECT *, IF (SDNO = 0, max (SDNO), SNDO) como orden, DESDE rcarddet WHERE RDATE = '2011-05-25' y RCNO = '1' y PLACE = 'H' y SDNO! = 0 ORDER BY orden ASC; ' –

Respuesta

4
SELECT * 
    FROM `rcarddet` 
WHERE `RDATE` = '2011-05-25' 
    AND `RCNO` = '1' 
    AND `PLACE` = 'H' 
ORDER BY 
    `SDNO` = 0, 
    `SDNO`; 
+0

+1 Esta es la forma más fácil en mi humilde opinión. – pilcrow

6

La forma más fácil

SELECT * FROM rcarddet 
    WHERE RDATE = '2011-05-25' and RCNO = '1'and PLACE = 'H' 
ORDER BY CASE 
      WHEN rcarddet.SDNO = 0 THEN [max_number_for_the_type_of_SDNO] 
      ELSE rcarddet.SDNO 
     END ASC 
+0

Hi MOG Ponies, ¿Puede explicarme aproximadamente qué es [max_number_for_the_type_of_SDNO]? Puedo entender todo menos eso. Disculpe las molestias. – user774105

+0

Busque el tipo de SDNO en la siguiente tabla y use el valor máximo. Por ejemplo, si SDNO es un INT, use 2147483647. http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html –

+0

Pero esto no se garantizará si funciona un 'SDNO' campo pasa a tener naturalmente el valor máximo para su tipo. – pilcrow