Соединение двух таблиц без просчитанного вывода или пропущенного вывода с NULL в таблице
Первая таблица называется stockcurrent и содержит все товары из разных магазинов. Вторая таблица содержит все продажи в древовидных магазинах. Теперь я хочу объединить эти две таблицы и получить вывод, в котором я нахожу для каждой продажи правильный запас в каждом магазине, он должен выглядеть следующим образом
Пункт продаж или утроил выход фондовых единиц
Мне нужен этот запрос для корректировки между небольшими магазинами комиксов. После моего последнего квеста я получил здесь очень хорошую помощь, так что я получил реальные складские единицы всех магазинов деревьев. Но любая попытка соединить этот результат с таблицей продаж возвращает меня к двум просчетам складских единиц.
это фотографии таблиц:
https://www.dropbox.com/preview/stockcurrent_table.PNG?role=personal
https://www.dropbox.com/preview/ticketlines_table.PNG?role=personal
SELECT
products.name AS VK_Artikel,
SUM(CASE WHEN stockcurrent.location ='100'
THEN stockcurrent.units ELSE 0 END) AS Versand_Bestand,
SUM(CASE WHEN stockcurrent.location ='3b53adf5-eaee-4a13-b22b-39d50b14e497'
THEN stockcurrent.units ELSE 0 END) AS K_Strasse,
SUM(CASE WHEN stockcurrent.location ='a59cb899-27f4-460c-b5df-89a89eaaef75'
THEN stockcurrent.units ELSE 0 END) AS O_Strasse,
SUM(CASE WHEN stockcurrent.location = '0'
THEN stockcurrent.units ELSE 0 END) AS EU
FROM ticketlines
JOIN products
ON ticketlines.product = products.id
JOIN tickets
ON ticketlines.ticket = tickets.id
JOIN receipts
ON tickets.id = receipts.id
JOIN closedcash
ON receipts.money = closedcash.money
JOIN stockcurrent
ON stockcurrent.product = products.id
WHERE closedcash.host ='X_Online'
AND closedcash.datestart > $P{startzeit}
Group BY VK_Artikel ASC
Я ожидаю следующий вывод:
Sold Item store_1_Stock store_2_Stock store_3_Stock
comic 1 1 2 1
Номера от каждого магазина
Я получу, если товар был продан более одного раза
Sold Item store_1_Stock store_2_Stock store_3_Stock
comic 1 3 6 3
или если один предмет был продан в одном из магазинов, но никогда не был доступен во всех древовидных магазинах, это никогда не даст результата.
1 ответ
Чтобы избежать просчетов, я предлагаю вам сделать свой расчет в отдельном подпункте, а затем объединить его с основным запросом.
SELECT
p.name AS VK_Artikel,
s.Versand_Bestand,
s.K_Strasse,
s.O_Strasse,
s.EU
FROM ticketlines tl
JOIN products p
ON tl.product = p.id
JOIN tickets t
ON tl.ticket = t.id
JOIN receipts r
ON t.id = r.id
JOIN closedcash c
ON r.money = c.money
LEFT JOIN (
SELECT product
SUM(CASE WHEN location ='100' THEN units ELSE 0 END) AS Versand_Bestand,
SUM(CASE WHEN location ='3b53adf5-eaee-4a13-b22b-39d50b14e497' THEN units ELSE 0 END) AS K_Strasse,
SUM(CASE WHEN location ='a59cb899-27f4-460c-b5df-89a89eaaef75' THEN units ELSE 0 END) AS O_Strasse,
SUM(CASE WHEN location = '0' THEN units ELSE 0 END) AS EU
FROM stockcurrent
GROUP BY product
) s
ON s.product = p.id
WHERE c.host ='X_Online'
AND c.datestart > $P{startzeit}
ORDER BY VK_Artikel ASC
Существует вероятность того, что объединения, участвующие в запросе, имеют много строк для каждого продукта, что влияет на ваши номера. Также, если вы по-прежнему получаете повторяющиеся строки, вы можете добавить distinct
в выбранном вами предложении SELECT DISTINCT ....