我正在使用下面的DDL来显示2018年和2019年几个月的销售数据。我的问题是,显然我们将没有2019年9月至2019年12月的数据,但我需要将其返回并显示0金额
我该如何编辑此查询,以使18和19的所有第1到12个月都回来了?
CREATE TABLE PrevYear (
[EmployeeNumber] char(8) NOT NULL,
[SaleAmount] int DEFAULT NULL,
[SaleDate] date NOT NULL,
[EmployeeName] char(17) NOT NULL
);
CREATE TABLE CurrentYear (
[EmployeeNumber] char(8) NOT NULL,
[SaleAmount] int DEFAULT NULL,
[SaleDate] date NOT NULL,
[EmployeeName] char(17) NOT NULL
);
INSERT INTO CurrentYear
VALUES ('ea12', '100', '2019-01-10', 'Sam Smith');
INSERT INTO CurrentYear
VALUES ('ea12', '199', '2019-01-13', 'Sam Smith');
INSERT INTO CurrentYear
VALUES ('ea12', '100', '2019-03-01', 'Sam Smith');
INSERT INTO CurrentYear
VALUES ('ls22', '100', '2019-05-01', 'Sam Smith');
INSERT INTO PrevYear
VALUES ('ea12', '100', '2018-01-10', 'Sam Smith');
INSERT INTO PrevYear
VALUES ('ea12', '199', '2018-01-13', 'Sam Smith');
INSERT INTO PrevYear
VALUES ('ea12', '100', '2018-03-01', 'Sam Smith');
INSERT INTO PrevYear
VALUES ('ls22', '100', '2018-05-01', 'Sam Smith');
我从查询中获得的期望输出是:
1月18日$ 1
1月19日$ 1
2月18日$ 1
2月19日$ 1
3月18日$ 1
3月19日$ 1
4月18日$ 1
4月19日$ 1
5月18日$ 1
5月19日$ 1
6月18日$ 1
6月19日$ 1
7月18日$ 1
7月19日$ 1
8月18日$ 1
8月19日$ 1
9月18日$ 1
9月19日$ 0
10月18日$ 1
10月19日$ 0
11月18日$ 1
十一月19 $ 0
12月18日$ 1
12月19日$ 0
这是我的查询
SELECT Month, Sum(ia) AS SaleAmount
FROM (SELECT Date_format(saledate, '%m-%Y') AS Month,
employeename,
Sum(SaleAmount) AS IA
FROM CurrentYear
WHERE employeename = 'Sam Smith'
GROUP BY Date_format(saledate, '%m-%Y'),
employeename
UNION ALL
SELECT Date_format(saledate, '%m-%Y') AS Month,
employeename,
Sum(SaleAmount) AS IA
FROM PrevYear
WHERE employeename = 'Sam Smith'
GROUP BY Date_format(saledate, '%m-%Y'),
employeename) previousQuery
GROUP BY month
ORDER BY month
答案 0 :(得分:0)
您可以简单地添加一个包含月份的查找表,该表将包含12条记录(每个月一条)
结构将是:id,描述。
在现有表上,您可以按ID引用月份:更少的空间,更多的连接性能。
在使用左/右联接的查询中,您总是缺少月份。
PS:只需一个表即可管理此表,并在多年管理中需要的位置添加一个简单的where条件(或按条件分组)