循环遍历多个记录

时间:2016-03-03 19:50:40

标签: sql oracle loops

以下标准可满足我所需要的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'

1 个答案:

答案 0 :(得分:1)

这将获得EMPL_REC状态的R和状态不是EMPL_RECA的相应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;