none
Consulta Union BD RRS feed

  • Question

  • Buenas tardes

    Como puedo unir dos consultas y que el resultado me muestre en columnas separadas

    select con_stock, total_productos
    from (
    	
    	Select count(*) as con_stock
    	from pedidomov pd, articulo a
    	where pd.codigo = a.codigo and pd.pedidokey = "PED2208125448" and a.kucun > 0 group by pd.pedidokey
    	union 
    	Select count(*) as total_productos
    	from pedidomov pd, articulo a
            where pd.codigo = a.codigo and pd.pedidokey = "PED2208125448" group by pd.pedidokey 

    Ahora muestra así

    saludos


    ruben

    Tuesday, September 20, 2022 4:49 PM

Answers

  • Hola Ruben Lezcano:

    Has pegado la imagen, y así no se ve en el ticket. Sólo la ves tú.

    Para futuras intervenciones, pega la imagen usando el botón de insert Image del cuadro donde insertas la pregunta.

    Por otro lado

    Select 1 as con_Stock
    union 
    Select 2 as total_productos 

    Esto que sustituye a tú consulta y para el escenario es igual de válido, es lo que te muestra la parte interior.

    Es lo que te devuelve el Union. Pero ojo, si los dos conjuntos devolvieran el mismo valor se convertiría en una fila.

    Select 1 as con_Stock
    union 
    Select 1 as total_productos 


    Lo primero, es cambiar union por union all, para que no omita los repetidos.

    Otra cosa que deberías de cambiar, es la sintaxis de la consulta. Ya no se usa el where para unir conjuntos, se hace usando ON.

    Create table pedidomov (pedidokey varchar(100), codigo int)
    Create table articulo (codigo int, kucun int)

    Ahora insertamos unas filas.

    Insert into pedidomov (pedidokey, codigo)
    values
    ('PED2208125448',1),
    ('PED2208125448',2),
    ('PED2208125448',3),
    ('PED2208125448',4),
    ('PED2208125448',5);
    Insert into articulo (codigo, kucun)
    values
    (1,1),
    (2,1),
    (3,0),
    (4,1),
    (5,0);

    La union se puede hacer así:

    Select pd.pedidokey, count(*) as con_stock, null as total_productos
    		from pedidomov pd inner join articulo a on pd.codigo = a.codigo
    		where 
    				pd.pedidokey = 'PED2208125448' 
    			and a.kucun > 0 
    		group by pd.pedidokey
    	UNION ALL
    	Select pd.pedidokey, null AS con_stock, count(*) as total_productos
    		from pedidomov pd inner join articulo a on pd.codigo = a.codigo
    	    where 
    			pd.pedidokey = 'PED2208125448' 
    		group by pd.pedidokey 


    Fíjate que he usado una columna para cada valor.

    Ahora la salida final para tener una fila por pedido es:

    SELECT D.pedidokey
    	, SUM(CON_STOCK) AS CON_STOCK
    	, SUM(TOTAL_PRODUCTOS) AS TOTAL_PRODUCTOS 
    FROM (
    	Select pd.pedidokey, count(*) as con_stock, null as total_productos
    		from pedidomov pd inner join articulo a on pd.codigo = a.codigo
    		where 
    				pd.pedidokey = 'PED2208125448' 
    			and a.kucun > 0 
    		group by pd.pedidokey
    	UNION ALL
    	Select pd.pedidokey, null AS con_stock, count(*) as total_productos
    		from pedidomov pd inner join articulo a on pd.codigo = a.codigo
    	    where 
    			pd.pedidokey = 'PED2208125448' 
    		group by pd.pedidokey 
    ) AS D
    GROUP BY D.pedidokey


    Tendrás que cambiar la sintaxis de pd.pedidoKey, porque en TSql se usan las comillas simples y en tu SGBD, en vista del código que has expuesto, se usan las comillas dobles.

    Union vs Union all

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

    Wednesday, September 21, 2022 2:40 AM

All replies

  • Hola Ruben Lezcano:

    Has pegado la imagen, y así no se ve en el ticket. Sólo la ves tú.

    Para futuras intervenciones, pega la imagen usando el botón de insert Image del cuadro donde insertas la pregunta.

    Por otro lado

    Select 1 as con_Stock
    union 
    Select 2 as total_productos 

    Esto que sustituye a tú consulta y para el escenario es igual de válido, es lo que te muestra la parte interior.

    Es lo que te devuelve el Union. Pero ojo, si los dos conjuntos devolvieran el mismo valor se convertiría en una fila.

    Select 1 as con_Stock
    union 
    Select 1 as total_productos 


    Lo primero, es cambiar union por union all, para que no omita los repetidos.

    Otra cosa que deberías de cambiar, es la sintaxis de la consulta. Ya no se usa el where para unir conjuntos, se hace usando ON.

    Create table pedidomov (pedidokey varchar(100), codigo int)
    Create table articulo (codigo int, kucun int)

    Ahora insertamos unas filas.

    Insert into pedidomov (pedidokey, codigo)
    values
    ('PED2208125448',1),
    ('PED2208125448',2),
    ('PED2208125448',3),
    ('PED2208125448',4),
    ('PED2208125448',5);
    Insert into articulo (codigo, kucun)
    values
    (1,1),
    (2,1),
    (3,0),
    (4,1),
    (5,0);

    La union se puede hacer así:

    Select pd.pedidokey, count(*) as con_stock, null as total_productos
    		from pedidomov pd inner join articulo a on pd.codigo = a.codigo
    		where 
    				pd.pedidokey = 'PED2208125448' 
    			and a.kucun > 0 
    		group by pd.pedidokey
    	UNION ALL
    	Select pd.pedidokey, null AS con_stock, count(*) as total_productos
    		from pedidomov pd inner join articulo a on pd.codigo = a.codigo
    	    where 
    			pd.pedidokey = 'PED2208125448' 
    		group by pd.pedidokey 


    Fíjate que he usado una columna para cada valor.

    Ahora la salida final para tener una fila por pedido es:

    SELECT D.pedidokey
    	, SUM(CON_STOCK) AS CON_STOCK
    	, SUM(TOTAL_PRODUCTOS) AS TOTAL_PRODUCTOS 
    FROM (
    	Select pd.pedidokey, count(*) as con_stock, null as total_productos
    		from pedidomov pd inner join articulo a on pd.codigo = a.codigo
    		where 
    				pd.pedidokey = 'PED2208125448' 
    			and a.kucun > 0 
    		group by pd.pedidokey
    	UNION ALL
    	Select pd.pedidokey, null AS con_stock, count(*) as total_productos
    		from pedidomov pd inner join articulo a on pd.codigo = a.codigo
    	    where 
    			pd.pedidokey = 'PED2208125448' 
    		group by pd.pedidokey 
    ) AS D
    GROUP BY D.pedidokey


    Tendrás que cambiar la sintaxis de pd.pedidoKey, porque en TSql se usan las comillas simples y en tu SGBD, en vista del código que has expuesto, se usan las comillas dobles.

    Union vs Union all

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

    Wednesday, September 21, 2022 2:40 AM
  • Buenos días 

    Muchas gracias Javi, tendré en cuenta tus recomendaciones.

    Y millones de gracias, es exactamente lo que estaba tratando de hacer

    saludos y abrazos


    ruben

    Wednesday, September 21, 2022 8:32 AM