如何通过OleDb获取SQL查询返回的记录数(Access JetEngine)
解决Access Jet Engine统计唯一记录数的问题
针对你需要统计RoundData表内队号大于0的不同Teams数量的需求,因为Jet Engine不直接支持COUNT(DISTINCT),可以通过将DISTINCT子查询作为派生表的方式实现,具体SQL语句如下:
SELECT COUNT(*) FROM ( SELECT DISTINCT {Team} FROM [RoundData] WHERE {Team} > 0 ) AS DistinctTeams
代码示例
替换你之前的错误语句,用以下代码即可直接获取数量:
CmdStr = $"SELECT COUNT(*) FROM (SELECT DISTINCT {Team} FROM [RoundData] WHERE {Team} > 0) AS DistinctTeams"; ReadCmd = new OleDbCommand(CmdStr, ResultsReportingOleDbConnection); int teamCount = (int)ReadCmd.ExecuteScalar();
错误原因说明
你之前的语句报错是因为子查询返回了多条结果,但外层用了=进行匹配,=要求子查询只能返回单行数据,所以触发了"At most one record can be returned by this subquery"的错误。而将子查询作为派生表后,外层可以直接统计这个临时表的行数,正好就是唯一Teams的数量。
内容的提问来源于stack exchange,提问作者Tony H
相关产品推荐
相关产品推荐

