Соединение двух таблиц без просчитанного вывода или пропущенного вывода с 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 ....

Другие вопросы по тегам