当我在数据库上执行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
任何帮助将不胜感激.. !!
答案 0 :(得分:4)
创建一个包含Jan-Dec所有月份的表,称之为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
当null时,您需要将SUM(Amount)转换为0。执行此操作的具体功能或方法取决于您的数据库平台,或者您可以在解释结果的代码中执行此操作。
答案 1 :(得分:1)
使用您的月份和排序顺序构建月份表。然后将您的月份列加入数据表中的月份列。那会给你零。
所以你的桌子看起来像
Month Sort
======================
January 1
February 2
March 3
etc.
您可以使用Create Table创建表格,然后使用Insert Scripts
CREATE TABLE #months (month VARCHAR(50), sort INT);
INSERT INTO #months VALUES ('January', 1);
INSERT INTO #months VALUES ('February', 2);
etc.
然后
SELECT m.Month, SUM(Amount) AS OrderTotal
FROM #months m LEFT OUTER JOIN budget1 on m.Month = budget1.Month
WHERE year=2011
GROUP BY m.Month
ORDER BY m.Sort