非常简单,我在MS Access中设置了一个多对一关系表,在这里,我成功地将不同的值作为单独的行提取出来。现在我需要枚举这些行。
该查询如下所示(由MS Access Designer生成-对格式设置表示歉意):
SELECT DISTINCT ValidationRule.ValidationCode AS Rule, Table.Template AS Template
FROM ValidationRule RIGHT JOIN (([Table] INNER JOIN TableVersion ON Table.TableID = TableVersion.TableID) INNER JOIN ValidationScope ON TableVersion.TableVID =   ValidationScope.TableVID) ON ValidationRule.ValidationId = ValidationScope.ValidationID
GROUP BY ValidationRule.ValidationCode, Table.Template
ORDER BY ValidationRule.ValidationCode;所以我的数据看起来是:
Rule     Template
v0007_m   C 00.01
v0189_h   C 01.00
v0189_h   C 05.01
v3000_i   C 08.00我需要向结果添加以下顺序值:
Rule     Template   Sequence
v0007_m   C 00.01   1
v0189_h   C 01.00   1
v0189_h   C 05.01   2 
v3000_i   C 08.00   1在中,我应该使用什么功能来完成这个任务?
发布于 2014-07-09 21:47:29
如果将所拥有的查询保存为一个名为qryValdationRule的单独查询,则该查询的构建将为您提供所需的服务:
SELECT qryValidationRule.Rule, qryValidationRule.Template, DCount("*", 'qryValidationRule', "[Rule] = '" & qryValidationRule.Rule & "' AND [Template] <= '" & qryValidationRule.Template & "'") AS Sequence
FROM qryValidationRule
ORDER BY qryValidationRule.Rule, qryValidationRule.Template;我们正在查找并获取数据集中具有相同或更少模板值的规则值的所有记录的计数。从本质上讲,这给了我们一个按规则分组的序列。只有当模板值在规则组之间是不同的时,这才能正常工作,这应该是正确的,因为您在跨表的交叉联接中拉出一个不同的值。它不像窗口函数那样方便或灵活,但它将为您提供所需的服务。
您还可能希望尝试此方法,这种方法可能更有效:
SELECT t1.Rule, t1.Template, COUNT(t2.Template) AS Sequence
FROM qryValidationRule AS t1 INNER JOIN qryValidationRule AS t2 ON t1.Rule = t2.Rule AND t1.Template >= t2.Template
GROUP BY t1.Rule, t1.Template
ORDER BY t1.Rule, t1.Template;编辑:添加了另一种查找相同数据的方法;由于JOINing和子查询的关系,可能会有更好的性能。
https://stackoverflow.com/questions/24651411
复制相似问题