简介
我有三个表: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
,但是总数量和可用数量的结果是错误的。有人可以指出我做错了什么吗?谢谢
答案 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)