我有一个使用SQL Server后端的Access数据库,并且我编写了一个查询,该查询按AgreementID
列对Panels
表中的条目进行排序,使用PanelID
主键确定排序。
MS Access中的查询如下:
SELECT
X.AgreementID, X.PanelID, X.Panel_TypeID,
((SELECT COUNT(*)
FROM Panels
WHERE (PanelID < X.PanelID)
AND (AgreementID = X.AgreementID);) + 1) AS Rank
FROM
Panels AS X
WHERE
(((X.AgreementID) IS NOT NULL))
ORDER BY
X.AgreementID, X.PanelID;
输出如下所示:
如您所见,与AgreementID
相关的每个条目都根据其PanelID
进行了排名。
我遇到的问题是有20k行,在Access中运行需要的时间太长,所以我希望在后端重新创建它,希望它比在前端使用链接表运行得更快。
SQL Server似乎不支持上面的方法,因此我需要一些指针来帮助我解决这个问题。
3条答案
按热度按时间ndh0cuux1#
您可以在SQL Server中使用子查询。但是,还有更好的方法可以做到这一点。
可以使用行编号函数。
这个方法的逻辑稍有不同,因为它只计算非空行。如果你想先计算所有行,那么你需要这样做:
为了有效执行这些查询,您将需要索引。
聚集索引
或具有包含列的非聚集索引
xwmevbvl2#
在SQL Server中运行这样一个简单的子查询应该可以很好地工作。假设后端表与Access表具有相同的架构,请尝试删除一些括号并运行相同的查询:
sd2nnvve3#
如果您不喜欢摆弄T-SQL和传递查询,可以使用我的
RowNumber
函数foundx 1 e0f1x。然后,查询可以简化为:
由于数据被缓存,它应该运行得相当快。
GitHub上的完整文档:是的。