SQL查询问题

标签 sql

当我对数据库执行 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/

相关文章:

sql - 创建唯一的主键以忽略重复项

sql - 如何根据特殊情况选择数据?

sql - SQL Server 的单独索引大小

php - mysql缓存和memcached的区别

c# - 在不导入 C# 数据源的情况下创建 SQL Server 连接字符串

sql - 如何在SQL Server中解决 'invalid object name'?

sql - 数据库表中的搜索模式

如果未找到值,则 sql join 返回 null

mysql - 如何计算 MySQL 中两个字段的唯一 ID?

sql - 如何查看当前Oracle DBMS是否是企业版?