java - 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);
}
解决方案
首先,这只是一个 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
推荐阅读
- css - 使用单元格引用运行 querySelector
- cygwin - 安装 openssh >=v8.2
- javascript - C++ Lambda 函数中的 NAPI 调用 Emit
- generics - Rust:泛型必须实现 &xx[...]
- admob - Admob 插页式接收请求但不填充广告
- msbuild - 错误 MSB4018:“CopyRefAssembly”任务意外失败
- blockchain - 是否有可能创建一个循环区块链?
- rust - 使用迭代器接口链接选项和结构字段的问题
- java - 用 JTextField 值画一条线,我做错了什么?
- list - 如何在此函数中将 Traversable 类型解释为 Applicative?