首页 > 解决方案 > java - 如何根据Java Netbeans中的项目类型在两个表之间减去数量?

问题描述

嗨,我有两个表 PURCHASE 和 DELIVERY,我想在另一个表“STOCK”中显示剩余数量。下面是我从我的 STOCK 表中得到的输出和我做的代码,但是计算是错误的。谁能帮我这个? 在此处输入图像描述

private void stock(){  

        dbConection db = new dbConection();
        Connection con=db.getConnection();     
            String sql = "Select delivery.pro_Name, delivery.pro_Code, (sum(purchase.pur_qty) - sum(delivery.Qty)) AS bal from  delivery, purchase where purchase.productCode = delivery.pro_Code GROUP BY delivery.pro_Code ";
            PreparedStatement pst = con.prepareStatement(sql);
            ResultSet rs = pst.executeQuery();
            DefaultTableModel tm = (DefaultTableModel)stockTable.getModel();

            tm.setRowCount(0);
            while(rs.next()){

                Object o[]={rs.getString("pro_Code"), rs.getString("pro_Name"), rs.getString("bal")};
                tm.addRow(o);
            }


        }catch(Exception ex){
            JOptionPane.showMessageDialog(null,ex);

        }

标签: javasql

解决方案


首先,这只是一个 SQL 问题,Java 只是为了查看结果。上面的代码将用于 MS SQL Server,因为您没有提供 SQL 数据库的类型。

最终库存从初始库存开始计算。所以你必须有类似的东西:

initial_stock + purchase_qty - delivery_qty  = final_stock (group by ProductId)

现在,如果您将您的文章/产品作为 FIFO 存储在数据库中,这意味着您还暗示了此公式中的价格,因此 group by 也暗示了 Fifo_Price 。这也可能是基于相关表的更复杂的 SQL Select。

假设您不需要 FIFO,而只需要剩余数量的库存,则选择语法将如下所示:

-- Supposing initial stock is stored in Product Table
Select pr.ProductID, pr.InitialStock, Sum(IsNull(pc.Quantity,0)) AS QuantityIn,
    Sum(IsNull(dv.Quantity,0)) AS QuantityOut, 
    pr.InitialStock + sum(IsNull(pc.Quantity,0) - IsNull(dv.Quantity,0)) AS FinalStock
From Products pr
Left Join Purchase pc on pr.ProductID = pc.ProductID
Left Join Delivery dv on pr.ProductID = dv.ProductID
Group By pr.ProductID, pr.InitialStock

-- if you want to see only products that are implied in purchase and delivery tables, you must Inner Join all tables

编辑:我已经删除了其余的答案,因为与问题无关。

编辑2:请看这张照片。我做了一个简单的测试,显示了我和你所做的结果:

选择语句

考虑到初始库存不为空,我没有强制替换为 0,但您也可以替换它,所以st.qty将是IsNull(st.Qty, 0) as InitialStock


推荐阅读