1

我有一张表格,列出了我们按年份分组的发票,总计如下

SELECT
  sum(totalValue/((100 + Vat)/100)) AS purchases ,
  year(invoice_date) AS invoiceyear
FROM invoices
GROUP BY year(invoice_date)
ORDER BY invoiceyear Desc;

我们也有一个 invoice 表列表,其中包含到供应商列表中 SupplierID 的链接,product 表还包括到供应商 ID 的链接列表

我需要根据天气分组发票是否用于库存订单,因此我需要根据是否存在具有匹配供应商ID的产品这一事实进行分组

这就是我被卡住的地方,当我运行连接时,我卡在如果供应商 ID 字段为空或不为空时如何分组?

还有一些发票是针对多种产品的,我如何确保我没有在发票表中创建多个记录?

4

1 回答 1

0

假设您的 SupplierID 列被调用SupplierID并且每个表都有一个id列,这是一个答案:

SELECT
    SUM(`totalValue` / ((100 + `Vat`)/100)) AS `purchases`,
    `order_type`,
    `invoice_year`
FROM (
    SELECT `i`.*,   
        IF(COUNT(`p`.`id`) = 0, 'custom', 'stock') AS `order_type`,
        YEAR(`i`.`invoice_date`) AS `invoice_year`
    FROM `invoices` AS `i`
    LEFT JOIN `products` AS `p` 
        ON `i`.`SupplierID` = `p`.`SupplierID`
    GROUP BY `i`.`id`
) AS `filtered`
GROUP BY `order_type`, `invoice_year`
ORDER BY `invoice_year` DESC

说明:为此,您需要在 products 表上左连接,按发票 ID 分组。如果有匹配的产品,产品 id 的计数将返回 0 或 > 0。

我们将其放在子查询中,因为我们不希望产品数量与外部分组复合,如果在某些情况下每张发票有超过 1 个产品(即有很多产品与相同的供应商 ID)。

于 2013-05-14T11:00:16.640 回答