Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Access SQL查询:按月分组,如果不存在也可以_Sql_Ms Access - Fatal编程技术网

Access SQL查询:按月分组,如果不存在也可以

Access SQL查询:按月分组,如果不存在也可以,sql,ms-access,Sql,Ms Access,在我的表表2中,我有一些按日期组织的金额。并不是所有的月份都存在 我需要一个查询,它为一年中的每个月提供一行,即12行:一月、二月等等 每月;我需要当月所有金额的总和以及按月计算的结果 我尝试了以下代码,它提供了Table2查询,但这不是我需要的。例如,这里我们只有6个月,而不是12个月,并且它们不是按时间顺序组织的 SELECT DISTINCTROW Format$([Table2].[Data],'mmmm yyyy') AS [Data By Month], Sum(Table2.Bud

在我的表
表2
中,我有一些按日期组织的金额。并不是所有的月份都存在

我需要一个查询,它为一年中的每个月提供一行,即12行:一月、二月等等

每月;我需要当月所有金额的总和以及按月计算的结果

我尝试了以下代码,它提供了
Table2查询
,但这不是我需要的。例如,这里我们只有6个月,而不是12个月,并且它们不是按时间顺序组织的

SELECT DISTINCTROW Format$([Table2].[Data],'mmmm yyyy') AS [Data By Month], Sum(Table2.Budget) AS [Sum Of Budget]
FROM Table2
GROUP BY Format$([Table2].[Data],'mmmm yyyy'), Year([Table2].[Data])*12+DatePart('m',[Table2].[Data])-1;


您必须创建一个包含所有月份的表的变量,然后将其与您的表联接,并且您的总和必须为ISNULL(总和(…),0)

您可以通过以下方式创建该表

DECLARE @FromDate DATETIME, @ToDate DATETIME;
SET @FromDate = '2018-01-01';
SET @ToDate = '2018-12-31';
DECLARE @Dates table (
  TheDate date,
  month integer,
  year integer);

INSERT into @Dates 
SELECT TOP (DATEDIFF(MONTH, @FromDate, @ToDate)+1) 
 TheDate  = DATEADD(MONTH, number, @FromDate),
 TheMonth = MONTH(DATEADD(MONTH, number, @FromDate)),
 TheYear  = YEAR(DATEADD(MONTH, number, @FromDate))
FROM [master].dbo.spt_values 
WHERE [type] = N'P' ORDER BY number;

Select * FROM @Dates

您可以使用年-月表/查询并创建表的外部联接,也可以动态创建生成年-月范围的笛卡尔查询:

SELECT 
    Format(DateSerial(Year([Data]),[Month],1),"mmmm yyyy") AS YearMonth, 
    Sum(Nz(IIf(DateSerial(Year([Data]),[Month],1)=DateSerial(Year([Data]),Month([Date]),1),Table2.[Budget],0),0)) AS Total
FROM 
    (SELECT DISTINCT 
        [Tens]+[Ones] AS [Month], 
        10*Abs([Deca].[id] Mod 10) AS Tens, 
        Abs([Uno].[id] Mod 10) AS Ones
    FROM 
        MSysObjects AS Uno, 
        MSysObjects AS Deca) AS Months, 
    Table2
WHERE
    Months.[Month] Between 1 And 12
GROUP BY 
    DateSerial(Year([Data]),[Month],1)
ORDER BY 
    DateSerial(Year([Data]),[Month],1);
子查询(月)生成0到100之间的数字。将这些值过滤为1到12的月份值


然后对预算值进行汇总,按年度和月份进行分组。

@a_horse_,我正在使用Access。对不起,我不知道它是哪个SQL。在MS Access中,您需要为此设置一个日历表。