考虑一个名为 [Supplier] 的表,其中包含示例数据
ID CompanyName Categories
-- ----------- ----------------------
1 Company 1 Category A
2 Company 2 Category B
3 Company 3 Category A, Category B
4 Company 4 Category B
5 Company 5 Category A, Category B
查询
SELECT
ID,
CompanyName,
Categories,
DCount("*", "Supplier", "ID=" & ID & " AND Categories.Value='Category A'") AS CountCatA
FROM
Supplier
会回来
ID CompanyName Categories CountCatA
-- ----------- ---------------------- ---------
1 Company 1 Category A 1
2 Company 2 Category B 0
3 Company 3 Category A, Category B 1
4 Company 4 Category B 0
5 Company 5 Category A, Category B 1
因此,我们将在 ORDER BY 子句中使用它,而不是使用 DCount() 填充列
SELECT
ID,
CompanyName,
Categories
FROM
Supplier
ORDER BY
DCount("*", "Supplier", "ID=" & ID & " AND Categories.Value='Category A'") DESC,
ID
返回
ID CompanyName Categories
-- ----------- ----------------------
1 Company 1 Category A
3 Company 3 Category A, Category B
5 Company 5 Category A, Category B
2 Company 2 Category B
4 Company 4 Category B
编辑回复:cmets
如果您怀疑DCount() 函数可能会减慢速度,那么您可以尝试使用SUM() 和GROUP BY 的替代方法:
SELECT
ID,
First(CompanyName_) AS CompanyName,
First(Categories_) AS Categories
FROM
(
SELECT
ID,
CompanyName AS CompanyName_,
Categories AS Categories_,
IIf(Categories.Value='Category A',1,0) AS IsPreferredCategory
FROM Supplier
)
GROUP BY ID
ORDER BY
SUM(IsPreferredCategory) DESC,
ID