我正在尝试在 MS Access 中基于员工列表、技能列表和包含有关哪些员工接受了每种技能培训级别的数据的数据的表创建一个数据透视表。如果在静止水平表中没有找到行,则表应返回默认值。
Employee Table
ID EmployeeName
1 David
2 Bob
3 Steven
4 Richard
Skills List Table
ID SkillName
1 Skill 1
2 Skill 2
3 Skill 3
4 Skill 5
SkillsTable
ID EmployeeID SkillID SkillLevel
1 1 1 3
2 3 4 2
我需要的最终结果如下所示。如果没有找到记录,则默认技能级别为 1。
Skill 1 Skill 2 Skill 3 Skill 4 Skill 5
David 3 1 1 1 1
Bob 1 1 1 1 1
Steven 1 1 1 2 1
Richard 1 1 1 1 1
基本上,即使技能表中没有行,我仍然应该返回所有员工和所有技能名称。
希望这是有道理的。如果有人有任何建议,我将不胜感激。谢谢
我创建了一个为我提供数据透视表的 SQL,但它仅在技能表中找到行时才返回数据,我没有获取所有员工姓名或所有技能名称。
以下 SQL 将为您提供所需的结果。请注意,我从“技能列表”表中删除了空格,因此它现在称为“技能列表”:
TRANSFORM First(IIf(Nz([SkillsTable].[SkillLevel])<>"",[SkillsTable].[SkillLevel],1)) AS SkillLvl
SELECT qryEmpSkill.EmployeeName
FROM (SELECT Employee.EmployeeName, Employee.ID, SkillsList.ID, SkillsList.SkillName FROM Employee, SkillsList) AS qryEmpSkill LEFT JOIN SkillsTable ON (qryEmpSkill.SkillsList.ID = SkillsTable.SkillID) AND (qryEmpSkill.Employee.ID = SkillsTable.EmployeeID)
GROUP BY qryEmpSkill.EmployeeName
ORDER BY qryEmpSkill.EmployeeName
PIVOT qryEmpSkill.SkillName;