以下标准可满足我所需要的75%。它返回具有两个或更多记录的员工,其中一个是状态' R' (TBL A),其中一个不是状态,而不是' a' r' (TBL B)。
如果给定员工的此表中的记录数未知,那么循环访问TBL B的最佳方法是什么?
SELECT DISTINCT A.EMPLID, A.EMPL_RCD, B.EMPL_RCD
FROM TBL A, TBL B
WHERE A.EMPLID = B.EMPLID
AND A.EMPL_RCD != B.EMPL_RCD
AND A.STATUS != 'A'
AND B.STATUS = 'R'
答案 0 :(得分:1)
这将获得EMPL_REC
状态的R
和状态不是EMPL_REC
或A
的相应R
,并且会执行此操作在单表扫描中(即没有连接):
SELECT EMPLID,
R_EMPL_RCD,
NOT_R_EMPL_RCD
FROM (
SELECT EMPLID,
EMPL_RCD AS R_EMPL_RCD,
COALESCE(
LAG( CASE STATUS WHEN 'R' THEN NULL ELSE EMPL_RCD END )
IGNORE NULLS OVER ( PARTITION BY EMPLID ORDER BY ROWID ),
LEAD( CASE STATUS WHEN 'R' THEN NULL ELSE EMPL_RCD END )
IGNORE NULLS OVER ( PARTITION BY EMPLID ORDER BY ROWID )
) AS NOT_R_EMPL_RCD,
STATUS
FROM TBL
WHERE STATUS <> 'A'
)
WHERE STATUS = 'R'
AND NOT_R_EMPL_RCD IS NOT NULL;