当我对数据库执行 SQL 查询时,数据库中的所有月份以及与该特定月份对应的所有值都将在“金额”列中汇总。 假设这是一个表
Month Category Amount Year
January Rent 12 2011
March Food 13 2011
January Gas 14 2011
May Enter 15 2011
March General 16 2011
因此,我编写了查询来使用以下方法对特定月份的所有值进行求和:-
"SELECT Month, SUM(Amount) AS OrderTotal FROM budget1 WHERE year="2011" GROUP BY month "
所以我得到的结果是这样的:-
Month Amount
January 26
March 29
May 15
但我想要的是,它应该显示从 1 月到 12 月的所有月份,以及这些月份前面的 0 值,这些月份在数据库中不存在,如上面的示例所示。
Month Amount
January 26
February 0
March 29
April 0
May 15
June 0
July 0
August 0
September 0
October 0
November 0
December 0
任何帮助将不胜感激..!!
最佳答案
创建一个包含 1 月到 12 月所有月份的表,将其命名为 Months。只需包含名称的单个列或添加一个额外的整数以进行排序(我通常称之为序数列),如下所示:
create table months (
month varchar(20),
ordinal
);
insert into months values ('January', 1);
insert into months values ('February', 2);
insert into months values ('March', 3);
...
insert into months values ('December', 12);
具体语法可能取决于您的数据库平台。然后,根据您的数据库:
SELECT months.Month, SUM(Amount) AS OrderTotal
FROM months
left join budget1
on months.month = budget1.Month
WHERE year="2011" or year is null
GROUP BY months.month, months.ordinal
ORDER by month.ordinal
当 SUM(Amount) 为空时,您需要将其转换为 0。执行此操作的具体函数或方法取决于您的数据库平台,或者您可以在解释结果的代码中执行此操作。
关于SQL查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5480869/