【问题标题】:How to display results based only on the part of the date in sql query in access如何仅根据访问中的sql查询中的日期部分显示结果
【发布时间】:2016-04-28 10:23:27
【问题描述】:

目前我的查询根据 2016 年的范围显示记录 - 并在月视图中显示结果 (Jan, Feb, March, Apr..)

SELECT Reference.source_ID AS Source, 
Sum(IIf([quote_date] Between #1/1/2016# And #12/31/2016#,1,0)) AS Total, 
Sum(IIf([quote_date] Between #1/1/2016# And #1/31/2016#,1,0)) AS Jan, 
Sum(IIf([quote_date] Between #2/1/2016# And #2/29/2016#,1,0)) AS Feb, 
Sum(IIf([quote_date] Between #3/1/2016# And #3/31/2016#,1,0)) AS Mar, 
Sum(IIf([quote_date] Between #4/1/2016# And #4/30/2016#,1,0)) AS Apr, 
Sum(IIf([quote_date] Between #5/1/2016# And #5/31/2016#,1,0)) AS May, 
Sum(IIf([quote_date] Between #6/1/2016# And #6/30/2016#,1,0)) AS June, 
Sum(IIf([quote_date] Between #7/1/2016# And #7/31/2016#,1,0)) AS July, 
Sum(IIf([quote_date] Between #8/1/2016# And #8/31/2016#,1,0)) AS Aug, 
Sum(IIf([quote_date] Between #9/1/2016# And #9/30/2016#,1,0)) AS Sept, 
Sum(IIf([quote_date] Between #10/1/2016# And #10/31/2016#,1,0)) AS Oct, 
Sum(IIf([quote_date] Between #11/1/2016# And #11/30/2016#,1,0)) AS Nov, 
Sum(IIf([quote_date] Between #12/1/2016# And #12/31/2016#,1,0)) AS [Dec]
FROM Reference
GROUP BY Reference.source_ID;

我希望添加允许用户选择日期范围的搜索表单

这会将以下参数添加到我的查询中

WHERE (((Reference.quote_date) Between [Forms]![Total_Calls_by_Source_Search]![StartDateTxt] And [Forms]![Total_Calls_by_Source_Search]![EndDatetxt]))

我的问题是如何更改查询,以便显示 2017 年、2018 年等的结果

【问题讨论】:

  • 您可以在 where 子句中使用 year([forms]![formname]![field]) 函数,该函数将为您提供该特定日期字段年份的结果
  • @LiamH 我将如何绕过子句中指定的年份:Sum(IIf([quote_date] #1/1/2016# 和 #1/31/2016#,1,0) ) 作为一月

标签: sql date ms-access


【解决方案1】:

这应该按quote_date 的年份对所有记录进行分组,并输出该特定年份的每个月的正确计数,由表单输入过滤。不太确定如何处理总行,它为那一年的每个非空记录添加 1。我不确定它是否适用于 GROUP BY refID。

SELECT Reference.source_ID AS Source, 
Sum(IIf(ISNULL([quote_date]),0,1)) AS Total, 
Sum(IIf(Month([quote_date])=1,1,0)) AS Jan, 
Sum(IIf(Month([quote_date])=2,1,0)) AS Feb, 
Sum(IIf(Month([quote_date])=3,1,0)) AS Mar, 
Sum(IIf(Month([quote_date])=4,1,0)) AS Apr, 
Sum(IIf(Month([quote_date])=5,1,0)) AS May, 
Sum(IIf(Month([quote_date])=6,1,0)) AS June, 
Sum(IIf(Month([quote_date])=7,1,0)) AS July, 
Sum(IIf(Month([quote_date])=8,1,0)) AS Aug, 
Sum(IIf(Month([quote_date])=9,1,0)) AS Sept, 
Sum(IIf(Month([quote_date])=10,1,0)) AS Oct, 
Sum(IIf(Month([quote_date])=11,1,0)) AS Nov, 
Sum(IIf(Month([quote_date])=12,1,0)) AS Dec
FROM Reference
WHERE (((Reference.quote_date) Between [Forms]![Total_Calls_by_Source_Search]![StartDateTxt] 
  And [Forms]![Total_Calls_by_Source_Search]![EndDatetxt]))
GROUP BY Reference.source_ID, YEAR([quote_date]);

【讨论】:

  • 感谢@Christoper D 的快速回复。
【解决方案2】:

您可以使用年份作为参数:

Sum(IIf([quote_date] Between DateSerial([year],2,1) And DateSerial([year],2+1,0),1,0)) AS Feb, 

另外 11 个月也是如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 2017-02-13
    • 2021-12-25
    • 2017-10-09
    • 1970-01-01
    相关资源
    最近更新 更多