2014-01-17 42 views
0

我有一個表的每月銷售數量列表與產品代碼和另一個列表的月份可以擴展之前或之後有月銷售。我需要結果顯示0銷售,如果在本月沒有銷售和累計增加了這一點。我曾嘗試過使用大小寫,如果將它放到0,如果sales.sales爲空,但這不起作用,我仍然只是空白。MySQL需要顯示0時沒有價值的右手錶中的連接,累計

create table summary as (SELECT 
    q1.productid As productid, 
    q1.date AS Month_View, 
    q1.sales AS Monthly_Units_Sold, 
    (@runtot_sales := @runtot_sales + q1.sales) AS Cumulative_Sales 
FROM 
    (SELECT 
    sales.productid, 
dates.date, 
if(sales.date is null,0,sales.sales) as sales 
from 
dates 
left join sales on dates.date = sales.date 
where 
sales.productid = '$input1' 
group by dates.date 
    ORDER BY date) AS q1); 
    "; 
+0

作爲在whitepsace或blanks作爲仍然NULL值空白? – clentfort

+0

'sales.date'和'dates.date'的類型是什麼? –

+0

他們都是日期 –

回答

0

嘗試COALESCE()函數返回一個列表的第一個非NULL值Also see demo here

CREATE TABLE summary AS 
(SELECT 
    q1.productid AS productid, 
    q1.date AS Month_View, 
    q1.sales AS Monthly_Units_Sold, 
    (
    @runtot_sales := @runtot_sales + q1.sales 
) AS Cumulative_Sales 
FROM 
    (SELECT 
    sales.productid, 
    dates.date, 
    COALESCE(sales.sales, 0) AS sales 
    FROM 
    dates 
    LEFT JOIN sales 
     ON dates.date = sales.date 
    WHERE sales.productid = '$input1' 
    GROUP BY dates.date 
    ORDER BY DATE) AS q1) ; 

MySQL COALESCE() function

+0

我認爲OQ正在尋找'sales.sales'值,你已經建議'COALESCE(sales.date,0)AS銷售' –

+0

@OllieJones我的壞將更新我的帖子 –

+1

謝謝,使用此方法並將where子句移至其工作的不同臨時表。 –

0

您濫用GROUP BY,因此越來越不確定的結果。看到這個:http://dev.mysql.com/doc/refman/5.5/en/group-by-extensions.html

如果你正在按產品和日期彙總你的項目,你可能需要這樣的東西。

SELECT sales.productid, 
     dates.date, 
     SUM(sales.sales) as sales 
    FROM dates 
    LEFT JOIN sales ON dates.date = sales.date 
WHERE sales.productid = '$input1' 
GROUP BY sales.productid, dates.date 
ORDER BY /* i'm not sure what you're trying to do with the running total */ 

注意SUM(sales.sales)處理從LEFT JOIN正確的NULL值。如果日期不加入銷售行,則sales.sales將爲NULL。

如果你想要做一個逐月的總結,你需要比你更多的邏輯。看到這篇文章:http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/

相關問題