在此SQLite查询中我在哪里做错了?

时间:2018-09-25 05:00:55

标签: sql sqlite

简介
我有三个表:Table_ItemDetails,Table_Invoices,Table_PartsTracker。
Table_ItemDetails包含项目的详细信息,Table_Invoices包含与项目数量有关的信息,而Table_PartsTracker显示在哪个项目中使用哪个项目以及使用多少数量。在所有这些表中,Item_Number是外键列

我的目标
我需要创建一个名为View_ItemDetails的视图,其中包含以下列
Item_Number,Item_Name,Item_Description,Total_Qty和Avl_Qty
总数量是通过从发票中添加项目的所有数量获得的,而可用数量是通过从总数量中减去项目中使用的项目而获得的。我已经附上了桌子的图片。
为此,我编写了这样的查询

CREATE VIEW IF NOT EXISTS View_ItemDetails 
AS SELECT 
Table_ItemDetails.Item_Number,
Table_ItemDetails.Item_Name,
Table_ItemDetails.Item_Description,
SUM(Table_Invoices.Qty) as Total_Qty,
(SUM(Table_Invoices.Qty) - ifnull(SUM(Table_PartsTracker.Items_Used), 0)) as Avl_Qty
 FROM Table_ItemDetails  
 OUTER LEFT JOIN Table_Invoices USING(Item_Number)
 OUTER LEFT JOIN Table_PartsTracker USING(Item_Number)
 GROUP BY Table_Invoices.Item_Number 

,但是总数量和可用数量的结果是错误的。有人可以指出我做错了什么吗?谢谢

Item Details Invoices Table Parts Tracker View

1 个答案:

答案 0 :(得分:1)

您遇到的问题是因为您要在明细,发票和零件之间进行交叉生产。换句话说,您将获得每个发票行的每个零件行,并汇总所有这些组合的所有数量数字。

由于发票和零件之间没有直接关系,因此需要独立进行分组。

CREATE VIEW IF NOT EXISTS View_ItemDetails AS 
SELECT 
    D.Item_Number,
    D.Item_Name,
    D.Item_Description,
    I.Qty as Total_Qty,
    I.Qty - ifnull((P.Items_Used), 0) as Avl_Qty
FROM Table_ItemDetails D 
OUTER LEFT JOIN (select Item_Number, sum(qty) as qty from Table_Invoices group by Item_Number) I USING(Item_Number)
OUTER LEFT JOIN (select Item_Number, sum(Items_Used) as Items_Used from Table_PartsTracker group by Item_Number) P USING(Item_Number)