2016-03-03 58 views
-1

以下標準可以滿足我需要的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 –

回答

1

這將得到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;