如何解决如果未设置 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 举报,一经查实,本站将立刻删除。