我有2个表,标签和证书,一对多关系-每个标签将具有0到10个以上与之关联的证书。
Tags Certs
[Tag] [Other fields] [Tag] [Date] [Length]
A-22 ... A-22 03/05/17 265
P-63 ... A-22 15/02/14 331
... A-22 09/12/12 656
P-63 01/02/12 1024
...
是否有一种方法可以将每个Tag的最近,第二最近,第三等等等长度返回为不同的字段?
我理想的最终产品如下所示:
[Tag] [Most recent length] [Second most recent] [third most] ...
A-22 265 331 656
P-63 1024
...
这个问题特别棘手,因为我最近从MySQL移植了该问题,它具有LIMIT子句,可以轻松解决此问题。我知道没有直接的等效项(来自MS Access Limit),但是我想知道是否还有其他方法可以实现我所需要的。
答案 0 :(得分:1)
多亏了HansUp和Foxfire,我才找到了解决方案。在此处发布信息可能会帮助其他有类似问题的人。
第一步是从Certs表构造一个排名查询:
SELECT t1.[Tag], t1.[Date], t1.[Length], COUNT(t1.[Date]) AS Rank
FROM [Certs] AS t1, [Certs] AS t2
WHERE (t1.[Date] <= t2.[Date]) AND t1.[Tag] = t2.[Tag]
GROUP BY t1.[Tag], t1.[Date], t1.[Length]
ORDER BY t1.[Tag];
哪个给出了结果:
[Tag] [Date] [Length] [Rank]
A-22 03/05/17 265 1
A-22 15/02/14 331 2
A-22 09/12/12 656 3
P-63 01/02/12 1024 1
...
从那里开始,向导会以[Tag]作为行标题,[Rank]作为列标题以及MAX([Length])作为值构造一个简单的交叉表查询,从而在问题中生成所需的表。