Mysql 表 Pivot 从同一个表中比较当前和上一年的销售额

时间:2021-02-26 21:54:37

标签: mysql join html-table phpmyadmin pivot-table

我用不同年份的销售数据创建了 mysqltable。link to sql fiddle

我想在表格中有一列显示今年的销售额,另外一列显示去年的销售额总和,如图所示。

CREATE TABLE agreement (
    Id INT NOT NULL,
    supplier VARCHAR(25) NOT NULL,
      sales VARCHAR(25) NOT NULL,
      yearDate DATE NOT NULL,
  yearx VARCHAR(10)


);

INSERT INTO agreement
    (Id, supplier, sales, yeardate,yearx)
VALUES
    ('1', 'AB Foods', '2', '2020-01-01', '2020'),
    ('2', 'BC Foods', '2', '2020-01-01','2020'),
    ('11', 'AB Foods', '34', '2020-02-01', '2020'),
    ('22', 'BC Foods', '80', '2020-02-01','2020'),
    ('5', 'AB Foods', '5', '2021-01-03','2021'),
    ('6', 'BC Foods', '5', '2021-01-03','2021'),
     ('52', 'AB Foods', '51', '2021-02-03','2021'),
    ('16', 'BC Foods', '50', '2021-02-03','2021')
    
;

SQL Fiddle example

enter image description here

我解决问题的方法:

    SELECT
 supplier,
 yearx,
 sum(if(month(yearDate) = 1, sales, 0))  AS Jan,
 sum(if(month(yearDate) = 2, sales, 0))  AS Feb,
 sum(sales)  AS Total_ThisYear,
  sum(sales)  AS Total_LaastYear
FROM agreement
GROUP BY supplier, yearx
order by yearx

但似乎我需要在 case 语句中使用 where 子句。

提前致谢

1 个答案:

答案 0 :(得分:1)

没有加入就不能这样做。这可能是可行的解决方案:

SELECT
 a.supplier,
 a.yearx,
 
 sum(if(month(a.yearDate) = 1, a.sales, 0))  AS Jan,
 sum(if(month(a.yearDate) = 2, a.sales, 0))  AS Feb,
 sum(a.sales)  AS Total_ThisYear,
 IFNULL(ls.sales, 0)  AS Total_LaastYear

FROM agreement a

LEFT JOIN (
  SELECT b.supplier, YEAR(b.yearDate) AS 'year', SUM(sales) AS 'sales' FROM agreement b
  GROUP BY b.supplier, YEAR(b.yearDate)
) ls ON ls.supplier = a.supplier AND ls.year = yearx - 1

GROUP BY a.supplier, a.yearx

order by a.yearx