每列显示每个date_sub的值

时间:2014-06-25 02:55:15

标签: mysql sql date

我想在一个查询中显示每月的商品代码销售额。但我现在唯一可以做的就是得到它的全部。我正在使用date_sub。

select p.itemcode, sa.quantity
from sales sa join product p on p.itemcode = sa.itemcode
where DATE >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH) and sa.quantity < 50
group by p.itemcode

上面显示的查询显示了此输出:

Itemcode        quantity
694                48
7891               45
B-04.020.12405     48
B-04.020.12407     49

我想要显示的输出是:

Itemcode          1   2   3    4   5   6
694               3   10  1    20  1   0 
7891              3   10  1    20  1   0 
B-04.020.12405    0   0   0    0   3   45
B-04.020.12407    3   10  1    20  1   0

谢谢!

1 个答案:

答案 0 :(得分:0)

以下查询使用CASE语句检查不同年龄并相应地添加数量:

select p.itemcode, 
SUM(
    CASE WHEN DATE >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH) THEN sa.quantity ELSE 0 
)  1,
SUM(
    CASE WHEN DATE >= DATE_SUB(CURDATE(), INTERVAL 2 MONTH) AND DATE < DATE_SUB(CURDATE(), INTERVAL 1 MONTH) THEN sa.quantity ELSE 0 
)  2,
SUM(
    CASE WHEN DATE >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND DATE < DATE_SUB(CURDATE(), INTERVAL 2 MONTH) THEN sa.quantity ELSE 0 
)  3,
SUM(
    CASE WHEN DATE >= DATE_SUB(CURDATE(), INTERVAL 4 MONTH) AND DATE < DATE_SUB(CURDATE(), INTERVAL 3 MONTH) THEN sa.quantity ELSE 0 
)  4,
SUM(
    CASE WHEN DATE >= DATE_SUB(CURDATE(), INTERVAL 5 MONTH) AND DATE < DATE_SUB(CURDATE(), INTERVAL 4 MONTH) THEN sa.quantity ELSE 0 
)  5,
SUM(
    CASE WHEN DATE >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH) AND DATE < DATE_SUB(CURDATE(), INTERVAL 5 MONTH) THEN sa.quantity ELSE 0 
)  6
from sales sa join product p on p.itemcode = sa.itemcode
where DATE >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH) and sa.quantity < 50
group by p.itemcode;