none
¿Cómo puedo hacer una consulta de unión tipo LEFT JOIN con la última salida de la siguiente consulta? RRS feed

  • Pregunta

  • Suponiendo que tengo otra tabla llamada Datos que tiene las columnas Item, Descripcion, UnidadDeMedida, lo que deseo es juntar la última salida de la consulta de abajo que ya está agrupada y totalizada (la parte que está en negrita) con las columnas de la tabla Datos, cuya columna en común con la salida de la consulta de abajo es la columna Item.

    WITH cte
    	AS (SELECT t.item
    		    , t.codigo
    		    , t.color
    		    , t2.codigo AS codigo2
    		    , t2.total AS total2
    		    , t3.codigo AS codigo3
    		    , t3.total AS total3
    	    FROM   
    		    tabla1 t
    			    LEFT JOIN tabla2 t2 ON t.codigo = t2.codigo
    			    LEFT JOIN tabla3 t3 ON t.codigo = t3.codigo),
    	valores
    	AS (SELECT c.codigo
    		    , c.color
    		    , c.item
    		    , COALESCE(c.total2, c.total3, 0) AS total
    	    FROM   
    		    cte c)
    	SELECT v.item
    		, v.codigo
    		, v.color
    		, SUM(v.total) AS Total
    	FROM   
    		valores v
    	GROUP BY v.item
    		  , v.codigo
    		  , v.color;




    jueves, 6 de junio de 2019 16:12

Respuestas

  • Hola James2016-2:

    Puedes anexar esto en un conjunto y en la salida relacionarlo.

    WITH cte
    	AS (SELECT t.item
    		    , t.codigo
    		    , t.color
    		    , t2.codigo AS codigo2
    		    , t2.total AS total2
    		    , t3.codigo AS codigo3
    		    , t3.total AS total3
    	    FROM   
    		    tabla1 t
    			    LEFT JOIN tabla2 t2 ON t.codigo = t2.codigo
    			    LEFT JOIN tabla3 t3 ON t.codigo = t3.codigo),
    	valores
    	AS (SELECT c.codigo
    		    , c.color
    		    , c.item
    		    , COALESCE(c.total2, c.total3, 0) AS total
    	    FROM   
    		    cte c)
    		    , agrupado (
    	SELECT v.item
    		, v.codigo
    		, v.color
    		, SUM(v.total) AS Total
    	FROM   
    		valores v
    	GROUP BY v.item
    		  , v.codigo
    		  , v.color
    		  )
    	   SELECT A.ITEM
    		   , A.CODIGO
    		   , A.COLOR
    		   , A.TOTAL
    		   , D.*
    		   FROM AGRUPADO A 
    		   LEFT JOIN DATOS D ON A.ITEM = D.ITEM;
    Espero te ayude

    jueves, 6 de junio de 2019 16:18

Todas las respuestas

  • Hola James2016-2:

    Puedes anexar esto en un conjunto y en la salida relacionarlo.

    WITH cte
    	AS (SELECT t.item
    		    , t.codigo
    		    , t.color
    		    , t2.codigo AS codigo2
    		    , t2.total AS total2
    		    , t3.codigo AS codigo3
    		    , t3.total AS total3
    	    FROM   
    		    tabla1 t
    			    LEFT JOIN tabla2 t2 ON t.codigo = t2.codigo
    			    LEFT JOIN tabla3 t3 ON t.codigo = t3.codigo),
    	valores
    	AS (SELECT c.codigo
    		    , c.color
    		    , c.item
    		    , COALESCE(c.total2, c.total3, 0) AS total
    	    FROM   
    		    cte c)
    		    , agrupado (
    	SELECT v.item
    		, v.codigo
    		, v.color
    		, SUM(v.total) AS Total
    	FROM   
    		valores v
    	GROUP BY v.item
    		  , v.codigo
    		  , v.color
    		  )
    	   SELECT A.ITEM
    		   , A.CODIGO
    		   , A.COLOR
    		   , A.TOTAL
    		   , D.*
    		   FROM AGRUPADO A 
    		   LEFT JOIN DATOS D ON A.ITEM = D.ITEM;
    Espero te ayude

    jueves, 6 de junio de 2019 16:18
  • Muchas gracias, me ayuda un montón, sigo ajustando esta consulta, pero sin su valiosa ayuda no hubiese podido avanzar. Un detalle menor, creo que se le pasó la palabra clave AS en: agrupado (SELECT...
    jueves, 6 de junio de 2019 17:10
  • De nada. Y correcto, al hacerla al vuelo suelen ocurrir estos detalles.
    jueves, 6 de junio de 2019 17:49