我有一个名为tbl_event的主表,它有多个字段。这些字段包括:id(唯一),protocolID,SubjectID和imgDate1。
现在,任何一名患者都可以在此表中拥有多条记录,并且对于允许的记录数量没有限制。我想把这些日期按顺序分成一个记录。
例如,如果protocolID:0388813 subjectID:0001在此表格中有4条记录,那些记录的imgDate1是1/1/2011,6 / 30/1995,3/11 / 2012,1 / 1/2000
我想将其作为
返回协议ID:0388813 subjectID:0001 DATE1:6/30/1995 Date2:1/1/2000 Date3:1/1/2011 Date4:03/11/2012
关于如何在Access中执行此操作的想法?
答案 0 :(得分:0)
在名为[tbl_event]
的表中考虑以下示例数据ID protocolID SubjectID imgDate1
-- ---------- --------- ----------
1 0388813 0001 2011-01-01
2 0388813 0001 1995-06-30
3 0388813 0001 2012-03-11
4 0388813 0001 2000-01-01
5 0388813 0002 2013-05-06
6 0388814 0001 2013-04-14
由于我们很幸运拥有[ID]字段,我们可以使用“自联接”技巧通过[protocolID] + [SubjectID]生成排名列表:
SELECT ID, protocolID, SubjectID, imgDate1, COUNT(*) AS Rank
FROM
(
SELECT t1.*
FROM
tbl_event t1
INNER JOIN
tbl_event t2
ON t2.protocolID=t1.protocolID
AND t2.SubjectID=t1.SubjectID
AND t2.ID<=t1.ID
)
GROUP BY ID, protocolID, SubjectID, imgDate1
... ...生产
ID protocolID SubjectID imgDate1 Rank
-- ---------- --------- ---------- ----
1 0388813 0001 2011-01-01 1
2 0388813 0001 1995-06-30 2
3 0388813 0001 2012-03-11 3
4 0388813 0001 2000-01-01 4
5 0388813 0002 2013-05-06 1
6 0388814 0001 2013-04-14 1
在这种情况下,我们可以略微修改它以给我们(最终)列名称:
SELECT ID, protocolID, SubjectID, imgDate1, "Date" & Format(COUNT(*), "00") AS ColName
FROM
(
SELECT t1.*
FROM
tbl_event t1
INNER JOIN
tbl_event t2
ON t2.protocolID=t1.protocolID
AND t2.SubjectID=t1.SubjectID
AND t2.ID<=t1.ID
)
GROUP BY ID, protocolID, SubjectID, imgDate1
... ...生产
ID protocolID SubjectID imgDate1 ColName
-- ---------- --------- ---------- -------
1 0388813 0001 2011-01-01 Date01
2 0388813 0001 1995-06-30 Date02
3 0388813 0001 2012-03-11 Date03
4 0388813 0001 2000-01-01 Date04
5 0388813 0002 2013-05-06 Date01
6 0388814 0001 2013-04-14 Date01
如果我们将该查询保存为[tbl_event_xtab_base],那么我们可以在交叉表查询中使用它:
TRANSFORM Max(tbl_event_xtab_base.[imgDate1]) AS MaxOfimgDate1
SELECT tbl_event_xtab_base.[protocolID], tbl_event_xtab_base.[SubjectID]
FROM tbl_event_xtab_base
GROUP BY tbl_event_xtab_base.[protocolID], tbl_event_xtab_base.[SubjectID]
PIVOT tbl_event_xtab_base.[ColName];
... ...生产
protocolID SubjectID Date01 Date02 Date03 Date04
---------- --------- ---------- ---------- ---------- ----------
0388813 0001 2011-01-01 1995-06-30 2012-03-11 2000-01-01
0388813 0002 2013-05-06
0388814 0001 2013-04-14