在多个记录中循环使用
问题描述:
以下标准可以满足我需要的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'
答
这将得到EMPL_REC
s的的R
地位和状态,是不是A
或R
,并会做它在一个单一表扫描相应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;
请解释“通过'TBL B'循环”的含义。这听起来不像是用查询完成的。 –
另请解释“其中一个*不*状态*不*在'a','r'(TBL B)”中,因为它与您的问题中的查询不匹配。 –
示例数据和预期输出在这里可能会有很大帮助。 http://stackoverflow.com/help/how-to-ask –