ORDER BY y UNION en SQL Server

En SQL Server tenemos la posibilidad de unir consultas y ordenar el resultado, ORDER BY y UNION en SQL Server hacen esta tarea, veamos sus opciones.

Para los ejemplos siguientes utilizare la base de datos NorthWind en SQL Server 2017.

Podría interesarte Restaurar base de datos .bak en SQL server 2017  

UNION BASICO

Tenemos la siguiente consulta utilizando UNION.

SELECT
    ContactName AS 'Nombre',
    ContactTitle AS 'Title',
    Address,
    City,
    PostalCode
FROM
    Customers
 
UNION
 
SELECT
    (FirstName+' -- '+LastName) AS 'Nombre',
    Title,
    Address,
    City,
    PostalCode
FROM
    Employees;
Union simple

En el primer select obtengo datos de la tabla Costumers, coloco la sentencia UNION y en la segunda consulta obtengo los datos de Employees.

Para que no se genere algún error es necesario utilizar en ambas consultas los mismos encabezados.

Para asignar encabezados utilizo la sentencia AS seguido de la descripción de la columna.

ORDER BY en UNION

Utilizando la consulta anterior aplicaremos la sentencia ORDER BY.

SELECT
    ContactName AS 'Nombre',
    ContactTitle AS 'Title',
    Address,
    City,
    PostalCode
FROM
    Customers
 
UNION
 
SELECT
    (FirstName+' -- '+LastName) AS 'Nombre',
    Title,
    Address,
    City,
    PostalCode
FROM
    Employees
ORDER BY
    Nombre ASC;
Order by y union

La sentencia ORDER BY se coloca al final de las dos consultas unidas.

El ordenamiento se realiza al resultado de las dos consultas y no solo a la consulta al que tiene arriba.

Es posible ordenar el resultado a partir de cualquier columna, para este ejemplo lo ordeno por el Nombre.

Ascendente y descendente:

  • ASC: Orden ascendente de las consultas (de menor a mayor o de la A a la Z).
  • DESC: Orden descendente de las consultas (de mayor a menor o de la Z a la A).

Podría interesarte Group by en SQL Server  

ORDER BY en las dos consultas con UNION

Para utilizar la sentencia ORDER BY en ambas consultas y unidas con UNION es necesario utilizar otra sentencia.

La sentencia que utilizare en esta ocasión es TOP, este devuelve un numero especifico de filas en la consulta.

¿Qué pasa si no la utilizo?, se genera un error en la ejecución de la consulta:

The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.

Veamos el ejemplo para obtener estas consultas:

SELECT
*
FROM(
    SELECT
        TOP (SELECT COUNT(*) FROM Customers)
        ContactName AS 'Nombre',
        ContactTitle AS 'Title',
        Address,
        City,
        PostalCode
    FROM
        Customers
    ORDER BY
        Nombre ASC
) AS Tabla1
 
UNION ALL
 
SELECT
*
FROM(
    SELECT
        TOP (SELECT COUNT(*) FROM Employees)
        (FirstName+' -- '+LastName) AS 'Nombre',
        Title,
        Address,
        City,
        PostalCode
    FROM
        Employees
    ORDER BY
        Nombre DESC
) AS Tabla2;
ORDER BY y UNION en SQL Server

Cada una de las consultas principales las encerramos en nuevas consultas, de esta forma obtenemos Tabla1 y Tabla2.

Para evitar el error del que les comentaba arriba utilizo la sentencia TOP seguida del número de filas de cada tabla.

SELECT COUNT(*) FROM Employees;

La consulta anterior devuelve el número de final de la tabla Employees, TOP requiere que especifiquemos el número de final a devolver.

Podría interesarte Conexión a base de datos SQL Azure  

Observaciones

La consulta con dos ORDER BY y UNION es posible que reduzca la velocidad de la consulta debido a las múltiples consultas realizadas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *