none
Utilización de UNION ALL RRS feed

  • Pregunta

  • Cordial saludo, actualmente tengo dos consultas que deseo unir. Al ejecutarlas por separado obtengo los datos que deseo, pero al unirlas me sale un error.

    Estas son las consultas y sus resultados por separado

    CONSULTA 1

    SELECT [ubicacion] AS OBRA
      ,[equipo] AS EQUIPO
      ,COUNT([fecha_hora]) AS CANTIDAD_EXCESOS_VELOCIDAD
    FROM [dbControlFlota].[dbo].[CalcExcesosVelocidad]
    WHERE YEAR(fecha_hora)=2021
    AND MONTH(fecha_hora)=1
    GROUP BY ubicacion,equipo

    RESULTADOS 1

    OBRA EQUIPO  CANTIDAD_EXCESOS_VELOCIDAD
    OBRA ANTIOQUIA BOLIVAR BU-02 2
    VINUS BU-21 21
    CONSORCIO FARALLONES FBU-01 39
    CONSORCIO FARALLONES FVD-07 2
    OBRA ANTIOQUIA BOLIVAR VD-183 6
    OBRA ANTIOQUIA BOLIVAR VD-287 2
    LA GUAJIRA VL-115 17


    CONSULTA 2

    SELECT 'TOTAL GENERAL'
      ,COUNT(DISTINCT[equipo]) 
      ,COUNT([fecha_hora])
    FROM [dbControlFlota].[dbo].[CalcExcesosVelocidad]
    WHERE YEAR(fecha_hora)=2021
    AND MONTH(fecha_hora)=1
    GROUP BY YEAR(fecha_hora),MONTH(fecha_hora)

    RESULTADOS 2

    (Sin nombre de columna) (Sin nombre de columna) (Sin nombre de columna)
    TOTAL GENERAL 7 89


    Cuando les aplico UNION ALL, me sale el siguiente error:

    SELECT [ubicacion] AS OBRA
      ,[equipo] AS EQUIPO
      ,COUNT([fecha_hora]) AS CANTIDAD_EXCESOS_VELOCIDAD
    FROM [dbControlFlota].[dbo].[CalcExcesosVelocidad]
    WHERE YEAR(fecha_hora)=2021
    AND MONTH(fecha_hora)=1
    GROUP BY ubicacion,equipo

    UNION ALL

    SELECT 'TOTAL GENERAL'
      ,COUNT(DISTINCT[equipo]) 
      ,COUNT([fecha_hora])
    FROM [dbControlFlota].[dbo].[CalcExcesosVelocidad]
    WHERE YEAR(fecha_hora)=2021
    AND MONTH(fecha_hora)=1
    GROUP BY YEAR(fecha_hora),MONTH(fecha_hora)

    Mens. 245, Nivel 16, Estado 1, Línea 1
    Conversion failed when converting the varchar value 'BU-02' to data type int.

    No entiendo porque al hacerlo por separado funciona, pero al juntar las consultas, falla.

    Gracias por su ayuda.


    Germanq




    viernes, 5 de marzo de 2021 12:18

Todas las respuestas

  • Hola German David Quinchia Zapata:

    Cuando utilizas union all las dos querys tienen que retornar las mismas columnas y del mismo tipo.

    En el caso del error te informa que la columna equipo no puede ser int.

    A priori, lo que indicas, suena raro, porque yo diría que las consultas las has ejecutado al revés.

    No obstante la solución es simple.

    Select ubicacion As obra
    	 , equipo As equipo
    	 , Count(fecha_hora) As cantidad_excesos_velocidad
    	   From dbcontrolflota.dbo.calcexcesosvelocidad
    	   Where Year(fecha_hora) = 2021 And Month(fecha_hora) = 1
    	   Group By ubicacion
    			  , equipo
    Union All
    Select 'TOTAL GENERAL'
    	 , Cast((Count(Distinct equipo) as varchar(100)))
    	 , Count(fecha_hora)
    	   From dbcontrolflota.dbo.calcexcesosvelocidad
    	   Where Year(fecha_hora) = 2021 And Month(fecha_hora) = 1
    	   Group By Year(fecha_hora)
    			  , Month(fecha_hora);

    Union all

    https://javifer2.wordpress.com/2020/04/07/union-vs-union-all/

    viernes, 5 de marzo de 2021 13:51