我有一個訪問資料庫,其中有許多記錄,我只需要在其中提取最新資訊。
這是我試圖開始作業的代碼:
SELECT c.RecordID, c.Employee, c.DecShotDate, c.DecShotLocation, c.DecReason, c.DecExplanation, e.ID, e.Employee, c.Training, c.CompletedDate, IIf([DecShotLocation]=0,"Hospital", IIf([DecShotLocation]=1,"MCS", IIf([DecShotLocation]=2,"Other Employer",IIf([DecShotLocation]=3,"Pharmacy",IIf([DecShotLocation]=4,"Primary Care",IIf([DecShotLocation]=5,"Urgent Care"," ")))))) AS StrDecLoc
FROM ((EmployeeInformation AS e
INNER JOIN CompletedTrainings AS c ON e.ID = c.Employee
) AS t
INNER JOIN
(
SELECT MAX(RecordID) AS mID, c.Training
FROM CompletedTrainings c
)
ON t.RecordID = c.RecordID
INNER JOIN
(
SELECT DISTINCT c.Training, c.RecordID AS dID
FROM CompletedTrainings c
) AS d
ON c.RecordID = d.dID
GROUP BY c.Training
) as M
on M.RecordID = t.RecordID
WHERE c.Training = 69 AND (((c.CompletedDate 365)>=IIf(Forms![frm_Decflu]!FrameAllOrCurrent=1,(c.CompletedDate 365),Date())))
GROUP BY c.RecordID, c.Employee, c.DecShotDate, c.DecShotLocation, c.DecReason, c.DecExplanation, e.ID, e.Employee, c.Training, c.CompletedDate);
這里的想法是,我需要 1 次培訓,我只需要參加過該培訓的員工,以及他們最后一次參加培訓的員工。
目前我在 JOIN 陳述句中遇到語法錯誤。
所以兩個內部選擇:
(
SELECT MAX(RecordID) AS mID, c.Training
FROM CompletedTrainings c
)
ON t.RecordID = c.RecordID
INNER JOIN
(
SELECT DISTINCT c.Training, c.RecordID AS dID
FROM CompletedTrainings c
) AS d
ON c.RecordID = d.dID
GROUP BY c.Training
) as M
on M.RecordID = t.RecordID
一起努力給我一份上次參加每次培訓的清單。和第一個選擇
SELECT c.RecordID, c.Employee, c.DecShotDate, c.DecShotLocation, c.DecReason, c.DecExplanation, e.ID, e.Employee, c.Training, c.CompletedDate, IIf([DecShotLocation]=0,"Hospital", IIf([DecShotLocation]=1,"MCS", IIf([DecShotLocation]=2,"Other Employer",IIf([DecShotLocation]=3,"Pharmacy",IIf([DecShotLocation]=4,"Primary Care",IIf([DecShotLocation]=5,"Urgent Care"," ")))))) AS StrDecLoc
FROM ((EmployeeInformation AS e
INNER JOIN CompletedTrainings AS c ON e.ID = c.Employee
從每個表中提取我需要的資訊。
這些獨立作業,除了第一個選擇拉重復培訓(這些培訓每年進行一次)。
我正在努力擺脫這種重復,制作一份關于誰接受過特定培訓的年度報告。
示例表:
表_E
| 身份證號碼 | 姓 | 給定的名稱 | 積極的 | 個人資訊欄 | 員工姓名 |
|---|---|---|---|---|---|
| 1 | 都樂 | 鮑勃 | -1 | 東西 | 鮑勃·多爾 |
| 2 | 克林頓 | 賬單 | -1 | 東西 | 比爾·克林頓 |
| 3 | 襯套 | 喬治·哈維 | 0 | 東西 | 喬治·H·W·布什 |
| 4 | 里根 | 羅納德 | 0 | 東西 | 羅納德·里根 |
| 5 | 伊斯特伍德 | 克林特 | -1 | 東西 | 克林特·伊斯特伍德 |
表_C
| 記錄ID | 員工 | 訓練 | 完成日期 | 渠務署 | 數字用戶線 | DR | 德 |
|---|---|---|---|---|---|---|---|
| 1 | 1 | 69 | 嗯嗯嗯 | 0 | |||
| 2 | 2 | 74 | 嗯嗯嗯 | ||||
| 3 | 3 | 69 | 嗯嗯嗯 | 1 | 某處 | 4 | 一些理由 |
| 4 | 4 | 52 | 嗯嗯嗯 | ||||
| 5 | 1 | 74 | 嗯嗯嗯 | ||||
| 6 | 2 | 69 | 嗯嗯嗯 | 2 | 某處 | 4 | 一些理由 |
| 7 | 5 | 69 | 嗯嗯嗯 | 0 | |||
| ... | ... | ... | ... | ... | ... | ... | ... |
| 972 | 1 | 69 | 嗯嗯嗯 | 1 | 某處 | 4 | 一些理由 |
| 973 | 5 | 69 | 嗯嗯嗯 | 1 | 某處 | 2 | 一些理由 |
| 974 | 1 | 73 | 嗯嗯嗯 | 1 | 某處 | 2 | 一些理由 |
| 974 | 2 | 69 | 嗯嗯嗯 | 0 |
tbl_T(不相關但它鏈接到 tbl_C)
| ID | 培訓名稱 | 重新獲得資格 |
|---|---|---|
| 69 | 鏡頭 | 每年 |
| 73 | 參考 | 一次 |
| 74 | 科里 | 一次 |
| 52 | 訓練 | 每年 |
此查詢的理想輸出是這樣的:
| 記錄ID | 員工 | 訓練 | 完成日期 | 渠務署 | 數字用戶線 | DR | 德 |
|---|---|---|---|---|---|---|---|
| 3 | 3 | 69 | 嗯嗯嗯 | 1 | 某處 | 4 | 一些理由 |
| 972 | 1 | 69 | 嗯嗯嗯 | 1 | 某處 | 4 | 一些理由 |
| 973 | 5 | 69 | 嗯嗯嗯 | 1 | 某處 | 2 | 一些理由 |
| 974 | 2 | 69 | 嗯嗯嗯 | 0 |
假設員工 3 在第一次之后沒有這樣做。
uj5u.com熱心網友回復:
access 使用 SQL 作為標準有點奇怪,所以這個可以在任何 SQL 后端完美作業的 SQL 可能無法訪問。不幸的是,此時我沒有機會嘗試:
SELECT t1.*
FROM tbl_C t1
INNER JOIN
(SELECT Max(recordId) AS maxRecId
FROM tbl_C WHERE Training=69 GROUP BY Employee) t2
ON t1.RecordId = t2.maxRecId;
(如果你愿意,你可以加入其他如 tbl_E 來獲取名稱)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342502.html
上一篇:使用ByRef更新記錄集欄位
