一系列年份的每日汇总计算
Daily aggregate calculations for a range of years
以下 ACCESS 查询 returns 某个年份范围内的每日总和。它运行没有错误,但 3 列的结果均为零。如果有人能说出为什么它没有正确添加总和,我将不胜感激。
SELECT
Month(days.day_start) AS [MONTH],
Day(days.day_start) AS [DAY],
Year(days.day_start) AS [YEAR],
(SELECT Round(Nz(Sum(sales_receipt.SELLING_PRICE * sales_receipt.quantity),0) ,2)
FROM SALES_RECEIPT
INNER JOIN INVENTORY ON INVENTORY.INVENTORY_ID = SALES_RECEIPT.INVENTORY_ID
WHERE SALES_RECEIPT.[SALE_DATE] >= days.day_start
AND SALES_RECEIPT.[SALE_DATE] < days.day_end) AS [Daily Sales Total],
(SELECT Round(Nz(Sum(sales_receipt.SELLING_PRICE * sales_receipt.quantity),0) ,2)
FROM SALES_RECEIPT
INNER JOIN INVENTORY ON INVENTORY.INVENTORY_ID = SALES_RECEIPT.INVENTORY_ID
WHERE SALES_RECEIPT.[SALE_DATE] >= days.day_start
AND SALES_RECEIPT.[SALE_DATE] < days.day_end
AND SALES_RECEIPT.SALES_TAX_EXEMPT="No") AS [Taxable Sales],
(SELECT Round(Nz(Sum(sales_receipt.SELLING_PRICE * sales_receipt.quantity),0) ,2)
FROM SALES_RECEIPT
INNER JOIN INVENTORY ON INVENTORY.INVENTORY_ID = SALES_RECEIPT.INVENTORY_ID
WHERE SALES_RECEIPT.[SALE_DATE] >= days.day_start
AND SALES_RECEIPT.[SALE_DATE] < days.day_end
AND SALES_RECEIPT.SALES_TAX_EXEMPT="Yes") AS [Tax Free Sales]
FROM
(SELECT
DateSerial(Year(sale_date), Month(sale_date), Day(sale_date)) AS day_start,
DateAdd("s", -1, DateSerial(Year(sale_date),
Month(sale_date), Day(sale_date))) AS day_end
FROM SALES_RECEIPT
WHERE sale_date >= #1/1/2009# AND sale_date < #12/31/2016#
GROUP BY Year(sale_date), Month(sale_date), Day(sale_date)
) AS days;
您的子查询聚合 return 为零,因为 day_end
小于 day_start
,而子查询的 WHERE
子句假设日期范围相反。事实上,FROM
子句派生的 table 中指定的 day_end
比 sale_date
.
少 秒
DateAdd("s", -1, DateSerial(Year(sale_date),
Month(sale_date), Day(sale_date)) AS day_end
查看 DateAdd's 间隔值并重新考虑您的需求。顺便说一句 DateSerial()
在这里是多余的。正确地 return 开始日期和结束日期之间具有正间隔的可行范围。以下是开始日期和结束日期之间的 100 天:
sale_date As day_start,
DateAdd("d", 100, sale_date) AS day_end
以下 ACCESS 查询 returns 某个年份范围内的每日总和。它运行没有错误,但 3 列的结果均为零。如果有人能说出为什么它没有正确添加总和,我将不胜感激。
SELECT
Month(days.day_start) AS [MONTH],
Day(days.day_start) AS [DAY],
Year(days.day_start) AS [YEAR],
(SELECT Round(Nz(Sum(sales_receipt.SELLING_PRICE * sales_receipt.quantity),0) ,2)
FROM SALES_RECEIPT
INNER JOIN INVENTORY ON INVENTORY.INVENTORY_ID = SALES_RECEIPT.INVENTORY_ID
WHERE SALES_RECEIPT.[SALE_DATE] >= days.day_start
AND SALES_RECEIPT.[SALE_DATE] < days.day_end) AS [Daily Sales Total],
(SELECT Round(Nz(Sum(sales_receipt.SELLING_PRICE * sales_receipt.quantity),0) ,2)
FROM SALES_RECEIPT
INNER JOIN INVENTORY ON INVENTORY.INVENTORY_ID = SALES_RECEIPT.INVENTORY_ID
WHERE SALES_RECEIPT.[SALE_DATE] >= days.day_start
AND SALES_RECEIPT.[SALE_DATE] < days.day_end
AND SALES_RECEIPT.SALES_TAX_EXEMPT="No") AS [Taxable Sales],
(SELECT Round(Nz(Sum(sales_receipt.SELLING_PRICE * sales_receipt.quantity),0) ,2)
FROM SALES_RECEIPT
INNER JOIN INVENTORY ON INVENTORY.INVENTORY_ID = SALES_RECEIPT.INVENTORY_ID
WHERE SALES_RECEIPT.[SALE_DATE] >= days.day_start
AND SALES_RECEIPT.[SALE_DATE] < days.day_end
AND SALES_RECEIPT.SALES_TAX_EXEMPT="Yes") AS [Tax Free Sales]
FROM
(SELECT
DateSerial(Year(sale_date), Month(sale_date), Day(sale_date)) AS day_start,
DateAdd("s", -1, DateSerial(Year(sale_date),
Month(sale_date), Day(sale_date))) AS day_end
FROM SALES_RECEIPT
WHERE sale_date >= #1/1/2009# AND sale_date < #12/31/2016#
GROUP BY Year(sale_date), Month(sale_date), Day(sale_date)
) AS days;
您的子查询聚合 return 为零,因为 day_end
小于 day_start
,而子查询的 WHERE
子句假设日期范围相反。事实上,FROM
子句派生的 table 中指定的 day_end
比 sale_date
.
DateAdd("s", -1, DateSerial(Year(sale_date),
Month(sale_date), Day(sale_date)) AS day_end
查看 DateAdd's 间隔值并重新考虑您的需求。顺便说一句 DateSerial()
在这里是多余的。正确地 return 开始日期和结束日期之间具有正间隔的可行范围。以下是开始日期和结束日期之间的 100 天:
sale_date As day_start,
DateAdd("d", 100, sale_date) AS day_end