【发布时间】:2011-05-19 17:42:58
【问题描述】:
我有一个不是我设计的 SQL Server 数据库。 员工的学位、执照和证书存储在几个不同的表中。 我已经编写了查询以将所有这些信息连接在一起,这样我就可以看到数据的整体结果。我被要求为此数据创建一个视图,该视图仅返回他们获得的最高学位和两个最高认证。 问题是,由于它是预先存在的数据,因此数据中没有内置层次结构。所有学位和证书都简单地存储为与其员工编号关联的字符串。 第一个合乎逻辑的步骤是创建一个邻接列表(我相信这是正确的术语)。 例如,“MD”是您可以在我们的列表中获得的最高学位。所以我给出了 1 的“排名”。下一个较低的学位被“排名”为 2。依此类推。 我可以加入包含这些的文本字段并返回它们的相关排名。 我遇到的问题是根据这个排名只返回两个最高的。 如果员工拥有多个学位或证书,则将其列在第二行或第三行。从逻辑的角度来看,我需要对员工 ID、名字和姓氏进行分组。然后一些如何根据我为他们创建的“排名”连接学位、证书和执照。就我的想法而言,这不是一个真正的层次结构,因为我只需要知道最高的两个,而不必知道结果之间的关系。
另一个潜在的警告是数据库必须保持在 SQL Server 2000 兼容模式。
任何可以提供的帮助将不胜感激。谢谢。
select a.EduRank as 'Licensure Rank',
b.EduRank as 'Degree Rank',
EmpComp.EecEmpNo,
EmpPers.EepNameFirst,
EmpPers.EepNameLast,
RTRIM(EmpEduc.EfeLevel),
RTRIM(EmpLicns.ElcLicenseID),
a.EduType,
b.EduType
from empcomp
join EmpPers on empcomp.eeceeid = EmpPers.eepEEID
join EmpEduc on empcomp.Eeceeid = EmpEduc.EfeEEID
join EmpLicns on empcomp.eeceeid = EmpLicns.ElcEEID
join yvDegreeRanks a on a.EduCode = EmpLicns.ElcLicenseID
join yvDegreeRanks b on b.EduCode = EmpEduc.EfeLevel
【问题讨论】:
-
我曾尝试使用 TOP 2,但我需要为每个员工返回 TOP 2,而不是为整个数据集返回。
标签: sql