2014-10-01 60 views
0

我試圖提取的一份報告顯示過去兩個完整的日曆月的銷量按以下格式:的MySQL顯示過去兩個月的銷售

Customer   August 2013 September 2014 
Company A    1,250    2,543 
Company B    4,245    1,423 
Company C    1,432    1,642 

我與客戶和個人交易與表成本。我很好,但不知道如何讓兩列相鄰。

select customers.customer as Customer, 
     sum(job.price) as August_2014 
from job,customers 
where customers.cust_id=job.customer 
and 
job.collect_date between '2014-08-01' and '2014-08-31' 
group by customer 
order by August_2014 desc 
limit 0,10 

感謝您的任何幫助。

約翰

+0

燦你給我們一個例子,你想要的輸出。 – Arun 2014-10-01 12:59:50

+0

@arun希望你能看到我在 – 2014-10-01 13:01:27

+0

之後的那種東西,你的意思是8月和9月的「兩列相鄰」。 – 2014-10-01 13:03:01

回答

1

的SUM()函數中使用CASE表達式,像這樣:

SELECT 
     customers.customer AS Customer 
    , SUM(case when job.collect_date >= '2014-08-01' and job.collect_date < '2014-09-01' THEN job.price ELSE 0 END)  AS August_2014 
    , SUM(case when job.collect_date >= '2014-09-01' and job.collect_date < '2014-10-01' THEN job.price ELSE 0 END)  AS September_2014 
FROM job 
INNER JOIN customers ON customers.cust_id = job.customer 
WHERE (job.collect_date >= '2014-08-01' AND job.collect_date < '2014-10-01') 
GROUP BY 
     customers.customer 
ORDER BY 
     August_2014 DESC 
limit 0,10 
; 

我改變聯接語法,明確連接這樣的強烈建議。


另請注意我已更改「日期範圍」的方法。只是不要相信這個「​​之間」。始終使用上面顯示的方法,並且數據中不會有任何空白或重疊(即您的數字是準確的)。

(DATE_FIELD> = lower_date_here和DATE_FIELD < higher_date_here)

正如你所看到的,「更高的日期」爲一天比你原來的多,那是因爲我們使用比在更高日期LESS

0

試試這個:

SELECT 
    customers.customer AS Customer, 
    MONTH(job.collect_date) AS Month, 
    sum(job.price) AS SumPrice 
FROM 
    job, 
    customers 
WHERE 
    customers.cust_id = job.customer 
GROUP BY 
    customer, 
    MONTH(job.collect_date) 

你不能做的order by價格了。我相信你可以自己製作桌子嗎?

沒有,人們可以不寫PHP自己,希望有一個例子:

// the sql command 
$sql = "SELECT 
      customers.customer AS Customer, 
      MONTH(job.collect_date) AS Month, 
      sum(job.price) AS SumPrice 
     FROM 
      job, 
      customers 
     WHERE 
      customers.cust_id = job.customer 
     GROUP BY 
      customer, 
      MONTH(job.collect_date)"; 
// fetching data   
if ($result = $mysqli->query($sql)) 
{ 
    while($row = $result->fetch_assoc()) 
    { 
    extract($row); 
    $data[$Customer][$Month] = $SumPrice; 
    } 
    $result->close(); 
} 
// render 
foreach($data as $customer => $prices) 
{ 
    echo $customer; 
    foreach($prices as $month => $price) 
    { 
    echo ' '.$price; 
    } 
    echo '<br>'; 
} 

注意到,該表呈現的是非常基本的,但它給你的想法,你需要努力一下就可以了,以使它更好。無論數據庫中有哪些月份,這都可以工作。主要優點是SQL查詢的簡單性。

+0

我想他希望在同一行上相鄰的幾個月。 – 2014-10-01 13:06:29

+0

我認爲你不明白這個SQL命令是幹什麼的。 – 2014-10-01 13:06:57

+0

這不可能是答案,因爲他希望在同一行中有兩列關於價格,這在此查詢中不會實現。 – 2014-10-01 13:07:19

相關問題