none
¿Hay forma de ordenar una columna numérica de la siguiente manera?: RRS feed

  • Pregunta

  • Una columna de una tabla que tiene números o filas vacías, por ejemplo:

    15002

    15003

    ------- Estos guiones representan vacío o null

    15001

    ------- 

    15007

    15005

    Que la ordene de menor a mayor (en orden descendente) pero que las filas en blanco las ponga al final.

    15001

    15002

    15003

    15005

    15007

    ------- Al final las filas vacías.

    -------

    jueves, 30 de mayo de 2019 4:35

Respuestas

  • Hola James2016-2:

    Order by admite case.

    DECLARE @table TABLE
    (id  INT IDENTITY(1, 1)
    , col VARCHAR(10)
    );
    
    INSERT INTO       @table(col)
    VALUES            ('15002'), ('15003'), ('null'), ('15001'), (''), ('15007'), ('15005');
    
    SELECT [@table].id
    	, [@table].col
    FROM   
    	@table
    ORDER BY CASE WHEN col = ''
    			   THEN '999998'
    		    WHEN col IS NULL 
    			   THEN '999999'
    		    ELSE col
    	    END;
    Con esto consigues romper el orden en función de lo que tu quieres. Dado que entiendo que solo tienes números como texto en la columna de la tabla, pues los espacios en blanco primero, y los null después.

    • Marcado como respuesta James2016-2 jueves, 30 de mayo de 2019 5:23
    jueves, 30 de mayo de 2019 4:57

Todas las respuestas

  • Hola James2016-2:

    Order by admite case.

    DECLARE @table TABLE
    (id  INT IDENTITY(1, 1)
    , col VARCHAR(10)
    );
    
    INSERT INTO       @table(col)
    VALUES            ('15002'), ('15003'), ('null'), ('15001'), (''), ('15007'), ('15005');
    
    SELECT [@table].id
    	, [@table].col
    FROM   
    	@table
    ORDER BY CASE WHEN col = ''
    			   THEN '999998'
    		    WHEN col IS NULL 
    			   THEN '999999'
    		    ELSE col
    	    END;
    Con esto consigues romper el orden en función de lo que tu quieres. Dado que entiendo que solo tienes números como texto en la columna de la tabla, pues los espacios en blanco primero, y los null después.

    • Marcado como respuesta James2016-2 jueves, 30 de mayo de 2019 5:23
    jueves, 30 de mayo de 2019 4:57
  • Gracias, qué interesante, admite case, eso es exactamente lo que quería, con eso sí los manda al final.

    jueves, 30 de mayo de 2019 5:14