连接两个表,没有计算错误的输出或缺少带有空in表的输出

arknldoa  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(244)

第一个表调用stockcurrent并包含来自不同存储树的所有产品项。secound表包含树存储中的所有销售。现在我想把这两个表连接起来,得到一个输出,在这个输出中,我可以找到每个销售商店中正确的库存,应该如下表所示
销售商品商店\u 1库存商店\u 2库存商店\u 3库存但是我总是有两个问题:第一:如果一个商品从来没有出现在树型商店中,它就不会出现´第二条:如果在一个给定的时间段内卖出了不止一件商品,那么库存单位的产量就会增加一倍或三倍
我需要这个小漫画商店之间的树调整查询。在我的最后一次任务后,我在这里得到了很好的帮助,所以我得到了所有树木商店的真正库存单位。但是,任何试图将这个结果与销售表联系起来的做法都会让我回到对库存单位的两个错误计算上。
这是table的照片:
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

或者,如果一个商品在其中一个商店出售,但从来没有在所有树商店提供,它永远不会给出一个输出。

liwlm1x9

liwlm1x91#

为了避免计算错误,我建议您在单独的子条款中进行计算,然后将其与主查询合并。

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子句中 SELECT DISTINCT ....

相关问题