Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java Netbeans中,如何根据项目类型减去两个表之间的数量?_Java_Sql - Fatal编程技术网

在Java Netbeans中,如何根据项目类型减去两个表之间的数量?

在Java Netbeans中,如何根据项目类型减去两个表之间的数量?,java,sql,Java,Sql,您好,我有两个选项卡“采购和交付”,其中我想在另一个表“库存”中显示剩余数量。 下面是我从库存表得到的输出和代码,但计算是错误的。 有人能帮我吗? 首先,这只是一个SQL问题,Java只用于查看结果。 以上代码将用于MS SQL Server,因为您没有提供SQL数据库的类型 最终库存从初始库存开始计算。 因此,您必须有如下内容: initial_stock + purchase_qty - delivery_qty = final_stock (group by ProductId) 现

您好,我有两个选项卡“采购和交付”,其中我想在另一个表“库存”中显示剩余数量。 下面是我从库存表得到的输出和代码,但计算是错误的。 有人能帮我吗?


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

最终库存从初始库存开始计算。 因此,您必须有如下内容:

initial_stock + purchase_qty - delivery_qty  = final_stock (group by ProductId)
现在,如果您将您的文章/产品以FIFO的形式存储在数据库中,这意味着您也暗示了此公式中的价格,因此group by也暗示了FIFO_价格。这也可能是基于相关表的更复杂的SQL选择

假设您不需要FIFO,但只需要剩余的库存量,select语法如下:

-假设初始库存存储在产品表中 选择pr.ProductID、pr.InitialStock、SumIsNullpc.Quantity、0作为QuantityIn, SumIsNulldv.Quantity,0作为QuantityOut, pr.InitialStock+sumIsNullpc.Quantity,0-IsNulldv.Quantity,0作为FinalStock 从产品公关 在pr.ProductID=pc.ProductID上左键加入购买pc pr.ProductID=dv.ProductID上的左连接传递dv 按pr.ProductID、pr.InitialStock分组 -如果只想查看采购表和交货表中隐含的产品,则必须内部联接所有表 编辑:我已经删除了答案的其余部分,因为这与问题无关

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


考虑到初始库存不是空的,我没有强制将其替换为0,但您也可以将其替换,因此st.qty将是空的st.qty,0作为初始库存

Hi Vali,感谢您的详细解释和有关问题的建议。我确实创建了不同的表,并尝试应用您的说明。但我仍然对剩余库存有错误,我在查询时尝试选择了pr.st_proCode、pr.st_Qty、Sumpc.pur_Qty作为QuantityIn、Sumdv.Qty作为QuantityOut,pr.st_数量+sumpc.pur_数量-sumpv.Qty作为库存的最终库存在pr.st_proCode=pc.productCode左加入采购pc在pr.st_proCode=dv.Pro_代码组在pr.st_proCode,pr.st_Qtyyou未测试为空。。。值+null等于null。。。如果left join未找到表的数量(输入或输出),则该值将替换为null。。。例如,如果您的产品id为stock=5,您没有购买,您有delivery 4,那么最终库存将不是1,而是null 5+null-4=null。因为左联接将用null替换产品id 1中缺少的数量。因此,您的select缺少IsNull函数:IsNullpc.Pur_qty,0,以将null值替换为0。此外,在FinalStock计算中不需要这些括号,因为a+b-c=a+b-c=a+b-c第二个“还”:尝试维护相同的命名列。若您将产品的Id命名为ProductID,那个么进入所有外部表并像这样重命名它。不要将它们命名为表中的PrID、另一个表中的ProdID、另一个表中的IDProduct等等。。。。编写和理解自己的代码将非常困难;检查答案,我已经编辑了它,并通过一个小测试从我的SSMS中添加了一张图片。嗨,瓦利,你太棒了。在看到您最新的参考溶液后,我刚刚在10分钟内完成了最终计算。请不要删除注释,因为它们确实有助于理解逻辑。谢谢!。
initial_stock + purchase_qty - delivery_qty  = final_stock (group by ProductId)