2015-07-14

Crear una consulta de UNION y de UNION ALL en Ms Access

Title

Problema

Queremos crear una consulta de unión en Ms Access. Una consulta de unión combinará los resultados de varias consultas de selección. Si es de UNION combinará aquellos resultados únicos y si es UNION ALL combinará todos los resultados.

Partimos de las siguientes dos tablas cuyos dos primeros registros están duplicados en ambas tablas.

Solución

Creamos una consulta y después clic en SQL Vista SQL. O bien abrimos una consulta antigua y la guardamos posteriormente con otro nombre.(Ver notas)

  • UNION
  • SELECT Tabla1.*
    FROM Tabla1;
    UNION 
    SELECT Tabla2.*
    FROM Tabla2;
    
    Como se puede observar, la consultade UNION, tan solo incluye aquellos registros únicos, excluyendo los duplicados.
  • UNION ALL
  • SELECT Tabla1.*
    FROM Tabla1;
    UNION ALL
    SELECT Tabla2.*
    FROM Tabla2;
    
    Como se puede observar, la consultade UNION, incluye todos los registros incluidos los duplicados.

La consultas de unión, una vez guardadas, aparecerán con el símbolo de dos aros anidados en el panel de navegación.

Notas

Una consulta de unión es específica de SQL. Las consultas específicas de SQL no se pueden mostrar en la vista Diseño y, por lo tanto, deben escribirse directamente en SQL. En Microsoft Office Access 2007, se utiliza la ficha de objeto Vista SQL para escribir consultas específicas de SQL, incluidas consultas de unión.

Referencias

5 comentarios:

  1. buenas tardes... estoy haciendo una consulta de union..

    pero quiero que me sume el total de BaseG de cada empleado sin que me muestre duplicados... esta es la consulta:

    SELECT CVE_EMP, CVE_EMP2, Sum(IIf([tipo]=1,GRAVABLE,0)) AS Baseg
    FROM Acum1
    WHERE (((MES)=4) AND ((AÑO)=2017))
    GROUP BY CVE_EMP, CVE_EMP2
    HAVING (((Sum(IIf([tipo]=1,GRAVABLE,0)))>0))
    UNION
    SELECT CVE_EMP, CVE_EMP2, Sum(IIf([tipo]=1,GRAVABLE,0)) AS Baseg
    FROM Acum2
    WHERE (((MES)=4) AND ((AÑO)=2017))
    GROUP BY CVE_EMP, CVE_EMP2
    HAVING (((Sum(IIf([tipo]=1,GRAVABLE,0)))>0))

    pero me arroja estos resultados:

    CVE_EMP CVE_EMP2 Baseg
    1 1 874.94
    1 1 1000
    129 0 278.14
    129 129 535
    129 129 200
    288 288 167.5
    735 735 234

    El empleado que Cve_emp y Cve_emp2 = 1 debe aparecer una vez y con el total de 1,874.94 y el # 129 debería de tener 735.

    Ayuda por favor!!

    ResponderEliminar
    Respuestas
    1. Hola Julio. No muestra registros duplicados pues el valor para la columna Baseg es diferente. Por tanto, los resultados de tu consulta de UNION son correctos Lo que quieres es posteriormente agrupar por las columnas CV_EMP y CVE_EMP2. Simplemente hazlo. Saludos.

      Eliminar
  2. gracias por tu rapida respuesta..

    podrias indicarme como hacerlo, por favor, para que me sume los resultados de Baseg ya agrupados por cve_emp y cve_emp2...

    desde ya muchas gracias!

    ResponderEliminar
    Respuestas
    1. Simplemente usa la consulta de unión creada como base de otra consulta. Tu pregunta no tiene nada que ver con esta entrada. Y además, esto no es un foro de resolución de preguntas. Te recomiendo que leas manuales de Access y consultes foros. Si tienes más preguntas, plantéalas allí.

      Eliminar
  3. ok.. disculpa entonces... gracias

    ResponderEliminar

Nube de datos