微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果未设置 WHERE 子句,则忽略 MS ACCESS 查询中的列

如何解决如果未设置 WHERE 子句,则忽略 MS ACCESS 查询中的列

问题

我有一个下拉列表,其中显示了与特定品牌相关联的所有 Article_Group_ID,使用以下查询

SELECT TbArticle.Article_Group_ID,TbArticle.Article_Brand_ID
FROM TbArticle
GROUP BY TbArticle.Article_Group_ID,TbArticle.Article_Brand_ID,HAVING (((TbArticle.Article_Brand_ID)=1))

这按预期工作,它返回以下内容

查询结果

Article_Brand_ID 文章_Group_ID
1 1
1 2

但是,如果用户不希望指定特定的 Article_Brand_ID,查询结果如下所示:

查询

Article_Brand_ID 文章_Group_ID
1 1
2 1
3 1
1 2

如您所见,相同的 Article_Group_ID 被返回了 3 次。因此,用户现在会看到同一个组 3 次,而不是一次。如果我从查询删除 Article_Brand_ID,结果将如下所示:

文章_Group_ID
1
2

如果没有设置 WHERE 子句,有没有办法通过“忽略”Article_Brand_ID 列来实现相同的行为?

数据库布局

Tb文章

Article_Brand_ID 文章_Group_ID
1 1
2 1
3 1
1 2

解决方法

单个查询不能返回可变数量的列。所以,严格来说,你不能用一个查询做你想做的事。但是,如果您愿意在未提供品牌时将第二列接受为 NULL,那么您可以调整聚合。

让我用 ? 表示参数:

SELECT a.Article_Group_ID,IIF(? IS NOT NULL,a.Article_Brand_ID,NULL) as Article_Brand_ID
FROM TbArticle as a
WHERE a.Article_Brand_ID = ? OR
      ? IS NULL
GROUP BY a.Article_Group_ID,NULL);

注意:通常最好在聚合之前过滤(即使用WHERE)而不是之后过滤(即使用HAVING)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。