【问题标题】:Access, Aggregate sums for each day of the week on a monthly basis访问,每月汇总一周中每一天的总和
【发布时间】:2016-07-16 15:23:23
【问题描述】:

我正在尝试按月汇总一周中每一天的销售总额。我相信 Access 中的 Weekday 功能可用于执行此操作。下面查询中的 Weekday 函数代码不起作用。应该如何修改 Weekday 函数语法以便对一周中的每一天的销售总额求和? (下面的查询已经更新了正确的代码,将返回正确的结果。)

SELECT Format(DatePart("m",months.month_start),"00") & "/" & Year(months.month_start) AS [Month/Year], 

(SELECT  Round(Nz(Sum(sales_receipt.SELLING_PRICE*sales_receipt.quantity),0),2)
FROM SALES_RECEIPT
WHERE SALES_RECEIPT.SALE_DATE between months.month_start and months.month_end and weekday(sale_date) = 1) AS [Sunday Sales Total], 

(SELECT  Round(Nz(Sum(sales_receipt.SELLING_PRICE*sales_receipt.quantity),0),2)
FROM SALES_RECEIPT
WHERE SALES_RECEIPT.SALE_DATE between months.month_start and months.month_end and weekday(sale_date) = 2) AS [Monday Sales Total], 

(SELECT  Round(Nz(Sum(sales_receipt.SELLING_PRICE*sales_receipt.quantity),0),2)
FROM SALES_RECEIPT
WHERE SALES_RECEIPT.SALE_DATE between months.month_start and months.month_end and weekday(sale_date) = 3) AS [Tuesday Sales Total], 

(SELECT  Round(Nz(Sum(sales_receipt.SELLING_PRICE*sales_receipt.quantity),0),2)
FROM SALES_RECEIPT
WHERE SALES_RECEIPT.SALE_DATE between months.month_start and months.month_end and weekday(sale_date) = 4) AS [Wednesday Sales Total], 

(SELECT  Round(Nz(Sum(sales_receipt.SELLING_PRICE*sales_receipt.quantity),0),2)
FROM SALES_RECEIPT
WHERE SALES_RECEIPT.SALE_DATE between months.month_start and months.month_end and weekday(sale_date) = 5) AS [Thursday Sales Total], 

(SELECT  Round(Nz(Sum(sales_receipt.SELLING_PRICE*sales_receipt.quantity),0),2)
FROM SALES_RECEIPT
WHERE SALES_RECEIPT.SALE_DATE between months.month_start and months.month_end and weekday(sale_date) = 6) AS [Friday Sales Total], 

(SELECT  Round(Nz(Sum(sales_receipt.SELLING_PRICE*sales_receipt.quantity),0),2)
FROM SALES_RECEIPT
WHERE SALES_RECEIPT.SALE_DATE between months.month_start and months.month_end and weekday(sale_date) = 7) AS [Saturday Sales Total]

FROM (SELECT DateSerial(Year(sale_date), Month(sale_date), 1) AS month_start, 
DateAdd("d", -1,  DateSerial(Year(sale_date), Month(sale_date) + 1, 1)) AS month_end
FROM SALES_RECEIPT 
WHERE sale_date between #1/1# And #12/31#
GROUP BY Year(sale_date), Month(sale_date)) AS months;

【问题讨论】:

  • 解释“它不起作用”的症状。您希望它的外观和实际结果的示例数据集
  • 运行查询时,会出现一个“ENTER PARAMETER VALUE”框,询问“date_value”。如果我输入的 date_value 为 1,即星期日,则 1 月份一周中的每一天的价值为 2016.62 美元(2016.62 美元是 1 月份所有 31 天的销售额)。周日应该是 0 美元,因为商店周日不营业。除周日外,每一天的收入应少于 2016.62 美元,但 1 月份一周中每一天的总和应为 2016.62 美元。

标签: ms-access-2010 aggregate-functions weekday


【解决方案1】:

看起来您没有使用 weekday 函数对参数进行实际比较:

对于每个工作日比较,请尝试更改

weekday(date_value = #))

到此

编辑更改以删除弹出窗口并使用实际字段

weekday(sale_date) = #) 

【讨论】:

  • 我进行了更改,但仍然出现“输入参数值”框,要求输入“日期值”。如果我输入的 date_value 为 1,即星期日,则只有星期日的值,其余日期为 0 美元。 1 月份星期日的值为 2016.62 美元(2016.62 美元是 1 月份所有 31 天的销售额总额)。如果我输入 2,则只有星期一有值,其他日期为 0 美元。一月份的星期一的值为 2016.62 美元。一周中的任何一天都是一样的,它提供每月总金额,其他日期为 0 美元。
  • 您已将其设置为参数 - 它是否会始终弹出 - 您是说您不想弹出 datevalue 吗?
  • 使用 sales_date 字段更新答案
  • 假设 sale_date 是日期字段而不是文本?
  • 我不想弹出参数框,而 sale_date 是一个日期字段。对于一周中的每一天更新的代码“weekday(sale_date) = 1) AS [Sunday Sales Total]”,查询返回正确的结果。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多