在多个记录中循环使用

问题描述:

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

请解释“通过'TBL B'循环”的含义。这听起来不像是用查询完成的。 –

+0

另请解释“其中一个*不*状态*不*在'a','r'(TBL B)”中,因为它与您的问题中的查询不匹配。 –

+1

示例数据和预期输出在这里可能会有很大帮助。 http://stackoverflow.com/help/how-to-ask –

这将得到EMPL_REC s的的R地位和状态,是不是AR,并会做它在一个单一表扫描相应EMPL_REC(即没有连接):

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;