【问题标题】:SQL (Access): Limiting Results with two DependentsSQL(访问):限制具有两个依赖项的结果
【发布时间】: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


【解决方案1】:

您将创建一个子查询,选择所有产品、地区和所有年份(酌情汇总),并排除总和为 0 的组合。调用此 X。

然后创建另一个查询,返回所有产品、地区和所有年份/月份,同时保持年份和月份字段(或至少年份字段)分开。组合。叫这个 Y。

创建另一个查询 Z,从 Y 中选择所有记录,这些记录可以在产品、地区和年份上内连接到 X。

如果我理解了原来的问题,查询 Z 会给你你所寻找的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 2021-08-15
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多