Где я делаю неправильно в этом запросе SQLite? - PullRequest
0 голосов
/ 25 сентября 2018

Введение
У меня есть три таблицы: 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 голосов
/ 25 сентября 2018

Проблема, с которой вы столкнулись, заключается в том, что вы делаете перекрестный продукт между деталями, счетами и деталями.Другими словами, вы получаете каждую строку деталей для каждой строки счета-фактуры и суммируете все кол-во чисел для всех этих комбинаций.

Поскольку нет прямой связи между счетом-фактурой и деталями, вам нужно делать группы независимо.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...