2013-05-14 79 views
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; 

我們也有發票表的列表包括供應商名單的鏈接供應商ID,產品表還包括供應商ID的鏈接列表

我需要根據天氣對發票進行分組或不發貨,因此我需要對事實進行分組,以確定是否存在具有匹配的supplierID的產品

這是我進入卡住的地方,當我運行結合im卡住關於如何根據supplierID字段爲空或不爲空進行分組?

還有一些發票是針對多個產品我如何確保我沒有在發票表中創建多個記錄?

+0

您能否提供供應商和產品所提及的表格和欄目的定義? – 2013-05-14 11:12:56

+0

給你的schema.Use(http://sqlfiddle.com/)。 – 2013-05-14 11:23:24

回答

0

假設你的供應商ID列稱爲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的計數將返回0或> 0,如果有匹配的產品或沒有。

我們把它放在一個子查詢中,因爲我們不希望產品與外部分組混合計數,如果在某些情況下每個發票有多個產品(如:許多產品具有相同的供應商ID)。

+0

請注意,這隻會返回給供應商的這些金額的總和,而不是針對那些有和沒有的金額的單獨計數。 – 2013-05-14 11:01:42

+0

糟糕,我誤解了這個問題。修改查詢,以便它能做他想做的事。 – 2013-05-14 11:06:54

+0

然後把它清理一下......應該現在就工作。 – 2013-05-14 11:11:39

相關問題