Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Sql 图形自动轴_Sql_Ms Access - Fatal编程技术网

Sql 图形自动轴

Sql 图形自动轴,sql,ms-access,Sql,Ms Access,我在MS Access中有一个SQL查询,它为条形图生成数据。此数据包含“01 Jan”格式的数字和月份名称。创建SQL是为了获取包括当前月份在内的过去5个月的数据。代码从新年起就不起作用了,如果我将5个月的跨度改为3个月,代码就可以起作用。我相信这是一个日期格式的问题,但我似乎不明白。我是SQL新手。谁能帮帮我吗。代码是: SELECT (Format([INITIATION DATE],"mm")) & " " & (Format([INITIATION DATE],"mmm

我在MS Access中有一个SQL查询,它为条形图生成数据。此数据包含“01 Jan”格式的数字和月份名称。创建SQL是为了获取包括当前月份在内的过去5个月的数据。代码从新年起就不起作用了,如果我将5个月的跨度改为3个月,代码就可以起作用。我相信这是一个日期格式的问题,但我似乎不明白。我是SQL新手。谁能帮帮我吗。代码是:

SELECT (Format([INITIATION DATE],"mm")) & " " & (Format([INITIATION DATE],"mmm")) AS Expr1, Sum([Data].[Count Area 1]) AS SumOfCount
FROM [Data]
GROUP BY (Format([INITIATION DATE], "mm")) & " " & (Format([INITIATION DATE], "mmm")), (Format([INITIATION DATE], "yyyy")) & (Format([INITIATION DATE], "mm"))
HAVING ((((Format([INITIATION DATE],"yyyy")) & (Format([INITIATION DATE],"mm")))>=Format(DateAdd("yyyy",0,Date()),"yyyy") & Format(DateAdd("m",-5,Date()),"mm")));

我想要的最终结果是

我想你想要一个
WHERE
子句,而不是
HAVING
子句。您需要的逻辑是日期而不是月份:

SELECT (Format([INITIATION DATE],"mm")) & " " & (Format([INITIATION DATE],"mmm")) AS Expr1,
        Sum([Data].[Count Area 1]) AS SumOfCount
FROM [Data]
WHERE [INITIATION DATE] >= DATEADD("mm", -5, DATE())
GROUP BY (Format([INITIATION DATE], "mm")) & " " & (Format([INITIATION DATE], "mmm"))

我想你需要的是
WHERE
子句,而不是
HAVING
子句。您需要的逻辑是日期而不是月份:

SELECT (Format([INITIATION DATE],"mm")) & " " & (Format([INITIATION DATE],"mmm")) AS Expr1,
        Sum([Data].[Count Area 1]) AS SumOfCount
FROM [Data]
WHERE [INITIATION DATE] >= DATEADD("mm", -5, DATE())
GROUP BY (Format([INITIATION DATE], "mm")) & " " & (Format([INITIATION DATE], "mmm"))

下面的表达式从月份中减去5个月,但不涉及年份

Format(DateAdd("yyyy",0,Date()),"yyyy") & Format(DateAdd("m",-5,Date()),"mm")))
因此,您要求所有日期都大于'202011'

我没有MSAccess,但似乎您可以将此作为最后一行

HAVING ((((Format([INITIATION DATE],"yyyymm"))>=Format(DateAdd("m",-5,Date()),"yyyymm")));

下面的表达式从月份中减去5个月,但不涉及年份

Format(DateAdd("yyyy",0,Date()),"yyyy") & Format(DateAdd("m",-5,Date()),"mm")))
因此,您要求所有日期都大于'202011'

我没有MSAccess,但似乎您可以将此作为最后一行

HAVING ((((Format([INITIATION DATE],"yyyymm"))>=Format(DateAdd("m",-5,Date()),"yyyymm")));

样本数据和期望的结果将非常有用。如果您只存储月份,您如何知道该月份属于哪一年。嗨,戈登,谢谢您的友好回复。我认为GROUPBY子句将以202001格式对数据进行排序,从而得到年份,然后“having”子句确保数据仅为最近5个月。这里的问题是,该代码在一年的前5个月是错误的,因为年份值没有改变。样本数据和期望的结果将非常有用。如果您只存储月份,您如何知道该月份属于哪一年。嗨,戈登,谢谢您的友好回复。我认为GROUPBY子句将以202001格式对数据进行排序,从而得到年份,然后“having”子句确保数据仅为最近5个月。这里的问题是,该代码在一年的前5个月是错误的,因为年份值没有改变。您好,谢谢您的帮助。这起作用了。然而,正如Gordon提到的,我需要找到一种方法来计算年份,因为我创建的图表假设11月和12月是今年的一部分,而不是去年。@TJ0007。如果可以在
WHERE
中进行筛选(即在聚合之前),则不要在
HAVING
子句中进行筛选。不要将日期转换为字符串进行比较。这段代码可能有效,但它不是编写逻辑的好例子。@GordonLinoff是的,你是对的。我的主要目的是解释为什么他的代码在过年后不起作用。嗨,谢谢你的帮助。这起作用了。然而,正如Gordon提到的,我需要找到一种方法来计算年份,因为我创建的图表假设11月和12月是今年的一部分,而不是去年。@TJ0007。如果可以在
WHERE
中进行筛选(即在聚合之前),则不要在
HAVING
子句中进行筛选。不要将日期转换为字符串进行比较。这段代码可能有效,但它不是编写逻辑的好例子。@GordonLinoff是的,你是对的。我的主要目标是解释为什么他的代码在过年后不起作用。