查找记录只有在所有匹配的密钥
问题描述:
我有两个表对:查找记录只有在所有匹配的密钥
table AV, KEY AVNR //(this is the request)
table AVKW, KEY AVNR and KWCD //(these are the required qualifications for the request, N:1 to AV)
AND:
table EM, KEY EMNR //(this is the employee)
table EMKW, KEY EMNR and KWCD //(these are the qualifications of the employee, N:1 to EM)
的样本数据:
AV:
AVNR (descr)
10 job december 10th
20 job december 11th
30 job december 12th
AVKW:
AVNR KWCD
10 operator
20 driving license
20 operator
(对于10日的工作,员工必须是经营者,11日需成为经营者并持有驾驶执照,12日不需要任何资格)
EM:
EMNR (name)
60 John
70 Pete
80 Bert
EMKW:
EMNR KWCD
60 operator
60 driving license
70 operator
(约翰是驾驶执照的驾驶员;皮特是运营商,但没有许可证。伯特根本没有资格)
对于约翰,查询应该返回所有的AV;皮特,只有十二。 10日和12日;对于伯特来说,只有第12名是 。
从员工的角度来看,我需要知道他能满足什么要求;所以我需要所有AVKW记录与当前员工匹配的AVEM记录(AV.KWCD = EM.KWCD)的AV记录。
(有额外的表KW,关键KWCD,列出了现有的资格,但现在甚至不相关)
我试过多种方法,但没有一个似乎工作...找到一个匹配的资格很容易,但是emp确实需要所有要求的资格。我将如何在SQL中编码?
在此先感谢!
答
我认为最简单的方法是选择具有等于实际资质的计数所需的配套资格的计数员工:
select * from
(
select
av.avnr,
count(*) as qualificationCount
from
avkw
inner join
av on
avkw.avnr = av.avnr
group by
av.avnr
) as qualification
inner join
(
select
em.emnr,
avkw.avnr,
count(*) qualificationCount
from
emkw
inner join
em on
emkw.emnr = em.emnr
inner join
avkw on
emkw.kwcd = avkw.kwcd
group by
em.emnr,
avkw.avnr
) as qualified
on
qualifications.avnr = qualified.avnr
where
qualifications.qualificationCont = qualified.qualificationCount
这应当列出所有的员工,每个可用的位置完全匹配。
答
如果你是开放的,使用2个查询,请尝试以下:
第一,保存为AV_EM_Match,每一个要求比较与每一位员工,并返回0,如果他们不胜任或数> 0,如果它们是:
SELECT AV.AVNR, EM.EMNR, EM.Name, AVKW.KWCD, Sum(IIf([AVKW].[KWCD] Is Null Or [AVKW].[KWCD]=[EMKW].[KWCD],1,0)) AS KW_Met
FROM AV LEFT JOIN AVKW ON AV.AVNR = AVKW.AVNR, EM LEFT JOIN EMKW ON EM.EMNR = EMKW.EMNR
GROUP BY AV.AVNR, EM.EMNR, EM.Name, AVKW.KWCD
ORDER BY AV.AVNR, EM.EMNR, AVKW.KWCD;
第二个使用该和选择合格的员工在每一个要求:
SELECT AV_EM_Match.AVNR, AV_EM_Match.EMNR, AV_EM_Match.Name, Min(AV_EM_Match.KW_Met) AS Selected
FROM AV_EM_Match
GROUP BY AV_EM_Match.AVNR, AV_EM_Match.EMNR, AV_EM_Match.Name
HAVING (((Min(AV_EM_Match.KW_Met))>0));
这也适用于没有要求和员工的工作没有资格 - 所有3名员工都被选为第三职位。
如果您希望他们按员工排序,而不是按职位排序,您可以切换第二个查询中字段的顺序。
(1)用您正在使用的数据库标记问题; (2)样本数据将澄清你想要做的事情。 –