我想获取一份清单,列出每个公司所有类别我们销售的产品数量。
我希望结果看起来像这样
Category A Company 1 0
Category A Company 2 0
Category A Company 3 5
Category B Company 1 1
Category B Company 2 4
Category B Company 3 0
因此,即使没有销售,每个类别都会返回,每个公司也会返回。
这是我正在尝试的查询,它应该使数据库的结构清晰。我从多个方向对此进行了攻击,但是似乎无法将自己的头绪围绕着如何找到想要的东西。
SELECT com.Company_Name, c.Category_Name, sum(p.Quantity)
FROM Category c
LEFT JOIN Item i on c.Category_ID = i.Category_ID
LEFT JOIN Products p on p.Item_ID = i.Item_ID
LEFT JOIN Invoice iv on iv.Invoice_ID = p.Invoice_ID
LEFT JOIN Company com on com.Company_Id = iv.Company_ID
group by c.Category_Name, com.Company_Name
感谢您的帮助...
答案 0 :(得分:1)
通过交叉联接生成行,然后在其余信息中生成left join
:
SELECT co.Company_Name, ca.Category_Name,
COALESCE(SUM(p.Quantity), 0) as quantity
FROM Category c CROSS JOIN
Company co LEFT JOIN
(Invoice iv JOIN
Products p
ON iv.Invoice_ID = p.Invoice_ID JOIN
Item i
ON p.Item_ID = i.Item_ID
)
ON co.Company_Id = iv.Company_ID AND
c.Category_ID = i.Category_ID
GROUP BY ca.Category_Name, co.Company_Name