none
Como sumar datos de dos tablas y luego restarlas RRS feed

  • Pregunta

  • Tengo una tabla de un inventario donde capturamos las entradas del inventari y tengo otra tabla donde registramos las salidas del inventario.

    he realizado dos SELECT por separado para luego llevarlos a una operacion donde se resten.

    mi pregunta es ¿Cómo puedo hacer esta operación de consulta de ambas tablas dentro de una misma consulta SELECT.

    dejo el código para que vean como lo hago aunque alli todavia no estoy haciendo las restas.

     private void sumar_existencia()
           {
                             
          OleDbConnection Conexion;

               Conexion = new OleDbConnection(ConfigurationManager.ConnectionStrings["almacenuttc.Propierties.Settings.almacendbConnectionStrings"].ToString());
               try
               {

                   Conexion.Open();

                   string v_codigo = txt_codigo.Text;
                   

                   string q = @"SELECT SUM(cantidad_recepcion)FROM tabla_recepcion WHERE codigo_articulo=@v_codigo";
                    
                   OleDbCommand COMANDO = new OleDbCommand(q, Conexion);


                   COMANDO.Parameters.Add(new OleDbParameter("@v_codigo", OleDbType.VarChar, 35));
                   COMANDO.Parameters["@v_codigo"].Value = v_codigo;
                                               
                    
                   int val = Convert.ToInt32(COMANDO.ExecuteScalar());
                   txt_cantidad_existencia.Text = Convert.ToString(val);

                   


                  string z = @"SELECT SUM(cantidad_entregada)FROM tabla_pedidos WHERE codigo_producto=@v_codigo";
                   OleDbCommand cmd = new OleDbCommand(z, Conexion);

                   cmd.Parameters.Add(new OleDbParameter("@v_codigo", OleDbType.VarChar, 35));
                   cmd.Parameters["@v_codigo"].Value = v_codigo;

                   int val_pedido = Convert.ToInt32(cmd.ExecuteScalar());
                   txt_costo_unitario.Text = Convert.ToString(val_pedido);

                           
                   cmd.Connection.Open();
                   cmd.ExecuteNonQuery();
                   cmd.Connection.Close();

                   COMANDO.Connection.Open();
                   COMANDO.ExecuteNonQuery();
                   COMANDO.Connection.Close();

                   MessageBox.Show("Datos guardatos con éxito");

               }

               catch (Exception ex)
               {
                   MessageBox.Show(ex.Message);
                   Conexion.Close();
               }

           }


    Humberto Martinez

    martes, 10 de mayo de 2016 21:04

Respuestas

  • Hola hum_marti,

    Desde mi punto de vista el modelo de tablas no es el correcto, pero evitare esas discrepancias por ahora. 

    Ya que los registros de entradas y salidas lo tienes en dos tablas y la integración para el consolidado de datos te trae problemas te sugiero que crees un mecanismo que te permita tener los los datos consolidados, puede ser una vista. Luego lo único que tendrás que consultar es la vista.

    CREATE VIEW Inventario
    AS
          SELECT codigo_articulo [codigo], cantidad_recepcion [cantidad] FROM tabla_recepcion
    
          UNION ALL
    
          SELECT codigo_producto, -(cantidad_entregada) FROM tabla_pedidos

    De hecho, esa vista podría tener mas datos como la fecha de movimiento, etc. Ahora, la consulta la podrías realizar contra la vista, algo como:

    string consultaSQL = "SELECT SUM(cantidad) FROM Inventario WHERE (codigo = @codigo)";


    martes, 10 de mayo de 2016 22:46
  • hum_marti,

    ¿Analizaste lo que te he propuesto? 

    Está claro lo que requieres, pienso que lo mas simple que puedes hacer es lo que te mencione.

    ¿Tú gestor de base de datos es Ms-Access?

    miércoles, 11 de mayo de 2016 15:30

Todas las respuestas

  • hola

    >>Tengo una tabla de un inventario donde capturamos las entradas del inventari y tengo otra tabla donde registramos las salidas del inventario.

    Pero la tabla de inventario no es necesaria, defines esto directo en un campo de producto que indica las existencias

    podrias tene uan tabla que registre cada operacion como auditoria pero no lo usarias para operaciones

    Creo que estas modelando de forma incorrecta

    a donde apunto es que cuando ingresa un producto sumas al campo la cantidad y cuando se vende resta a ese mismo campos de la tabla de productos

    puede llevar la operacion como historico si quieres registrar la fecha y hora y quien realizo la operacion en una tabla separada, pero sera de solo consulta

    >>¿Cómo puedo hacer esta operación de consulta de ambas tablas dentro de una misma consulta SELECT

    si quieres cruzar informacion vas a tener que usar el INNER JOIN  definiendo algun campo de relacion, imagino sera el Id del producto

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 10 de mayo de 2016 21:11
  • Hola hum_marti,

    Desde mi punto de vista el modelo de tablas no es el correcto, pero evitare esas discrepancias por ahora. 

    Ya que los registros de entradas y salidas lo tienes en dos tablas y la integración para el consolidado de datos te trae problemas te sugiero que crees un mecanismo que te permita tener los los datos consolidados, puede ser una vista. Luego lo único que tendrás que consultar es la vista.

    CREATE VIEW Inventario
    AS
          SELECT codigo_articulo [codigo], cantidad_recepcion [cantidad] FROM tabla_recepcion
    
          UNION ALL
    
          SELECT codigo_producto, -(cantidad_entregada) FROM tabla_pedidos

    De hecho, esa vista podría tener mas datos como la fecha de movimiento, etc. Ahora, la consulta la podrías realizar contra la vista, algo como:

    string consultaSQL = "SELECT SUM(cantidad) FROM Inventario WHERE (codigo = @codigo)";


    martes, 10 de mayo de 2016 22:46
  • Ayudame amigo para hacerlo la verdad tengo ideas pero no soy experto en este tema. dejo una imagen de como seria graficamento lo que quiero lograr.


    Humberto Martinez

    miércoles, 11 de mayo de 2016 15:21
  • Amigo como lo haria con Inner Joint algun ejemplo?

    consultar dos tablas podria pero como consulto dos tablas con inner join y a la vez sumo sus datos y toma las variables de resultados para restarlas. dejo imagen de lo que deseo lograr


    Humberto Martinez

    miércoles, 11 de mayo de 2016 15:22
  • hum_marti,

    ¿Analizaste lo que te he propuesto? 

    Está claro lo que requieres, pienso que lo mas simple que puedes hacer es lo que te mencione.

    ¿Tú gestor de base de datos es Ms-Access?

    miércoles, 11 de mayo de 2016 15:30
  • Si mi gestor de base de datos es Accses.Me sugieres crear una sola tabla donde se almacenen las recepciones de productos y tambien se almacenen los pedidos de productos?

    arriba me das un ejemplo de como hacer un create view pero nunca lo he hecho.

    podrias ayudarme a crear ese codigo con la imagen enviada por favor. ayudame amigo de verdad necesito ayuda.


    Humberto Martinez

    miércoles, 11 de mayo de 2016 16:24