2014-10-01 55 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

相关问题