【发布时间】:2018-04-28 08:11:54
【问题描述】:
我对 SQL 和 Access 还很陌生,所以我尝试做的事情可能非常简单,或者可能无法按照我的意图进行。
我查询了按地区和日期(月和年)列出的所有销售产品(包括价值和数量)。如果产品已售出,我希望查询返回该特定产品和地区一年中的所有 12 个月。这一切都有效。但是,我想通过排除任何特定产品和地区的产品销售额为“0”的所有条目来限制我的查询。
示例:如果产品在特定年份内未在特定地区销售,则查询不应返回该产品和地区在该年份的任何条目。这可能吗?
在下面的代码中 NationalCode = 产品,RegionCode = 地区。我希望其他一切都应该是不言自明的。 :)
我认为解决方案需要一个 WHERE 语句,我包含了一个子句,它只返回高于“0”的值。但这也会删除任何为 0 的月份,如果在给定年份有销售,我想保留没有销售的月份。
我希望上面说得通。谢谢!
SELECT IIf(isnull(sum(MonthlyData.[Sales
Value])),0,(sum(MonthlyData.[Sales Value])/1000)) AS [Value],
IIf(isnull(sum(MonthlyData.[Sales Units])),0,sum(MonthlyData.[Sales
Units])) AS Volume, [02-Query-Filter].RegionCode,
[02-Query-Filter].NationalCode, [02-Query-Filter].Year, [02-Query-Filter].RawMonth
FROM [02-Query-Filter]
LEFT JOIN MonthlyData
ON ([02-Query-Filter].RegionCode=Left(MonthlyData.Region,2)) AND
([02-Query-Filter].NationalCode=MonthlyData.[Nordic Code]) AND
([02-Query-Filter].RawMonth=MonthlyData.Month)
WHERE MonthlyData.[Sales Value]>0
GROUP BY [02-Query-Filter].RegionCode,
[02-Query-Filter].NationalCode, [02-Query-Filter].Year, [02-Query-Filter].RawMonth
【问题讨论】:
-
您可能可以在报告中,但我不确定查询,因为您想创建没有数据的行。除非您实际上每个月都有一排,即使没有销售。 (?)
-
嗨,是的,我已经做到了,这样我每个月都会得到一行。所以这部分有效。然而,缺点是我也为没有销售的产品获得了这个。所以我想过滤掉某个地区根本没有销售的年份。
-
从一个单独的查询开始可能是最简单的,它只获取有销售额的产品。然后将其用作第 2 步(您在上面的查询)的基础,每个月都会显示。
-
对 wazz 的建议使用单独的查询。或者使用 WHERE NOT EXISTS 向您的查询添加一个子查询,该查询检索任何特定产品和地区在一年中产品销售额为“0”的所有产品。
标签: sql database ms-access ms-access-2010 conditional-statements