查询给定日期 X 个月的销售总额
Posted
技术标签:
【中文标题】查询给定日期 X 个月的销售总额【英文标题】:Query to sum sales totals for X number of months given dates 【发布时间】:2015-07-20 03:11:56 【问题描述】:我想查询每个产品 ID 在一组月份(即 5 月 - 8 月)的总销售额
我想要:
+------------+-------------------------+-------+--------------+-----------------+
| PRODUCT_ID | ITEM | PRICE | GROSS_MARGIN | Sum Of QUANTITY |
+------------+-------------------------+-------+--------------+-----------------+
| 100-10 | ALVE laptop table | 89 | 56% | 23323 |
| 100-15 | FREDRIK desk | 129 | 44% | 9614 |
| 100-20 | GALANT conference table | 369 | 32% | 10272 |
+------------+-------------------------+-------+--------------+-----------------+
但我无法设置查询来执行此操作,因为我是新手(真的是我第一次玩弄它)。
这是我当前查询的结果:
+------------+--------------------------+---------+--------------+--------------------+----------+
| PRODUCT_ID | ITEM | PRICE | GROSS_MARGIN | TRANSDATE By Month | QUANTITY |
+------------+--------------------------+---------+--------------+--------------------+----------+
| 100-10 | ALVE laptop table | $89.00 | 56.00% | August 2011 | 9679 |
| 100-10 | ALVE laptop table | $89.00 | 56.00% | July 2011 | 9436 |
| 100-10 | ALVE laptop table | $89.00 | 56.00% | June 2011 | 3222 |
| 100-10 | ALVE laptop table | $89.00 | 56.00% | May 2011 | 986 |
| 100-15 | FREDRIK desk | $129.00 | 44.00% | August 2011 | 3150 |
| 100-15 | FREDRIK desk | $129.00 | 44.00% | July 2011 | 2695 |
| 100-15 | FREDRIK desk | $129.00 | 44.00% | June 2011 | 3769 |
| 100-20 | GALANT conference table | $369.00 | 32.00% | August 2011 | 3814 |
| 100-20 | GALANT conference table | $369.00 | 32.00% | July 2011 | 4977 |
| 100-20 | GALANT conference table | $369.00 | 32.00% | June 2011 | 225 |
| 100-20 | GALANT conference table | $369.00 | 32.00% | May 2011 | 1256 |
+------------+--------------------------+---------+--------------+--------------------+----------+
基本上,我想要一行来总结这 4 个月(5 月到 8 月,包括当月的每一天)该商品的所有销售额。如有必要,请忽略其他列(价格和保证金)。
任何帮助将不胜感激,我需要在星期五之前完成这项工作! 已经玩了好几个小时了,但每次我走近一步时,我似乎都会打破一些东西。 :'(
这是我当前的 SQL 语法/代码(抱歉,不知道正确的术语)。
SELECT DISTINCTROW
PRODUCTS.PRODUCT_ID,
PRODUCTS.ITEM,
PRODUCTS.PRICE,
PRODUCTS.GROSS_MARGIN,
Format$([SALES].[TRANSDATE],'mmmm yyyy') AS [TRANSDATE By Month],
Sum(SALES.QUANTITY) AS [Sum Of QUANTITY]
FROM PRODUCTS INNER JOIN
SALES ON PRODUCTS.[PRODUCT_ID] = SALES.[PRODUCT_ID]
GROUP BY
PRODUCTS.PRODUCT_ID,
PRODUCTS.ITEM,
PRODUCTS.PRICE,
PRODUCTS.GROSS_MARGIN,
Format$([SALES].[TRANSDATE],'mmmm yyyy'), Year([SALES].[TRANSDATE])*12+DatePart('m',[SALES].[TRANSDATE])-1;
这实际上显示了所有月份和年份的所有数据(我有所有产品的 2 年数据)。我只想要一年(2011 年 5 月至 8 月)四个月内每个产品 ID 的总销售额。请帮忙!
【问题讨论】:
sqlfiddle.com/#!3/71d47 这是两个表的示例数据。基于这些表,我想要一个查询,该查询可以为每个 ID 带来销售额,并将 2011 年 5 月至 8 月的销售额总计,如上所述。非常感谢任何帮助.. 花了 4 多天时间试图解决这个问题... 需要新鲜的眼睛。 【参考方案1】:由于这是 Access,SQL Fiddle 只能是一个开始。
您需要正确“引用”日期表达式:
SELECT
PRODUCTS.PRODUCT_ID,
PRODUCTS.ITEM,
Sum(SALES.QUANTITY) AS [Sum Of QUANTITY]
FROM
PRODUCTS INNER JOIN
SALES ON PRODUCTS.[PRODUCT_ID] = SALES.[PRODUCT_ID]
WHERE
[SALES].[TRANSDATE] BETWEEN #2015-05-01# AND #2015-08-31#
GROUP BY
PRODUCTS.PRODUCT_ID,
PRODUCTS.ITEM
更正 2015-07-23
非常抱歉错过了您的原始数据的日期为 2011 年而不是 2011 年。我特此发布更正后的 SQL 供您测试:
SELECT
PRODUCTS.PRODUCT_ID,
PRODUCTS.ITEM,
Sum(SALES.QUANTITY) AS [Sum Of QUANTITY]
FROM
PRODUCTS INNER JOIN
SALES ON PRODUCTS.[PRODUCT_ID] = SALES.[PRODUCT_ID]
WHERE
[SALES].[TRANSDATE] BETWEEN #2011-05-01# AND #2011-08-31#
GROUP BY
PRODUCTS.PRODUCT_ID,
PRODUCTS.ITEM
这将从您的 Access 数据库中生成一个输出。但是,与 SQL Fiddler 一起使用时会有所不同:
SELECT
PRODUCTS.PRODUCT_ID,
PRODUCTS.ITEM,
Sum(SALES.QUANTITY) AS [Sum Of QUANTITY]
FROM
PRODUCTS INNER JOIN
SALES ON PRODUCTS.[PRODUCT_ID] = SALES.[PRODUCT_ID]
WHERE
[SALES].[TRANSDATE] BETWEEN '2011-05-01' AND '2011-08-31'
GROUP BY
PRODUCTS.PRODUCT_ID,
PRODUCTS.ITEM
很抱歉给您带来不便。
【讨论】:
我已经尝试过了,它没有返回没有结果的预期列。我不确定查询在哪里被窃听,但这是我认为正确的,它什么也没返回。我将在今天晚些时候将两张表的部分内容上传到小提琴中,也许这会帮助某人找出问题所在。 sqlfiddle.com/#!3/71d47 这是两个表的示例数据。基于这些表,我想要一个查询,该查询可以为每个 ID 带来销售额,并将 2011 年 5 月至 8 月的销售额总计,如上所述。非常感谢任何帮助.. 花了超过 4 天的时间试图解决这个问题......需要新鲜的眼睛。 —— 这样的查询不会返回任何记录...因为您只有 2010-01 和 2011-03 之间的数据。 sqlfiddle.com/#!3/db52cc 更新为包括我提到的月份(2011 年 5 月 - 8 月)。以上是关于查询给定日期 X 个月的销售总额的主要内容,如果未能解决你的问题,请参考以下文章