考慮在一個名爲表下面的示例數據[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
在這種情況下,我們CA ñ修改稍微給我們我們(最終)列名:
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
您的解決方案存在一個潛在障礙:您說「對每個病人允許多少條記錄」沒有限制,但Access表和查詢限制爲255列,所以如果有[protocolID] + [subjectID]在[tbl_event]中有超過253條記錄,那麼Access將無法產生你想要的輸出。 –
謝謝。那麼沒有理論上的限制,但有一個實際限制30左右。所以這不會是一個問題。 – tferr85
好,很好。還有一點需要澄清:您的樣本數據顯示了按時間順序排列的日期(推測按ID順序列出),期望的結果按時間順序顯示[日期1],[日期2] ...。以[ID]順序生成[Date1],[Date2] ...比按時間順序生成要簡單得多。這是絕對的要求嗎? –