rownum和group by详细限制为1000行

时间:2015-10-09 00:18:47

标签: oracle rownum

对于EL8_STGG_CEHL_EXCP中的每个唯一组合keys(AST_ID,PRCS_ID,PRCS_NME,PRCS_STEP_NME,SRC_APPL_LOG_DT),我需要在详细信息表EL8_STGG_CEHL_LOG中限制为1000行。

例如 - 如果有3个唯一的组合键,我希望详细信息表中有3000行。

SELECT 
       E.AST_ID, 
       E.PRCS_ID, 
       E.PRCS_NME, 
       E.PRCS_STEP_NME,
       E.SRC_APPL_LOG_DT
    FROM EL8_STGG_CEHL_EXCP  E,EL8_STGG_CEHL_LOG L 
    WHERE
       L.AST_ID  = E.AST_ID 
       AND L.PRCS_ID  = E.PRCS_ID 
       AND L.PRCS_NME  = E.PRCS_NME  
       AND L.PRCS_STEP_NME  = E.PRCS_STEP_NME  
       AND L.SRC_APPL_LOG_DT = E.SRC_APPL_LOG_DT        
       AND (L.CEHL_PICK_UP_IND IS NULL OR UPPER(L.CEHL_PICK_UP_IND) not in ('Y','P'))
    GROUP BY
       E.AST_ID, 
       E.PRCS_ID, 
       E.PRCS_NME, 
       E.PRCS_STEP_NME,
       E.SRC_APPL_LOG_DT

如果有人可以帮助我,那将会很有帮助

由于

1 个答案:

答案 0 :(得分:0)

未经测试......这是要模拟的大量数据。

基本上,我使用我最喜欢的分析函数row_number()

with limited as (
  select
    L.*,
    row_number() over (partition by AST_ID,PRCS_ID,PRCS_NME,
      PRCS_STEP_NME,SRC_APPL_LOG_DT order by rownum) as rn
  from EL8_STGG_CEHL_LOG L
)
SELECT 
   E.AST_ID, 
   E.PRCS_ID, 
   E.PRCS_NME, 
   E.PRCS_STEP_NME,
   E.SRC_APPL_LOG_DT
FROM
  EL8_STGG_CEHL_EXCP  E,
  limited L 
WHERE
  L.AST_ID  = E.AST_ID 
  AND L.PRCS_ID  = E.PRCS_ID 
  AND L.PRCS_NME  = E.PRCS_NME  
  AND L.PRCS_STEP_NME  = E.PRCS_STEP_NME  
  AND L.SRC_APPL_LOG_DT = E.SRC_APPL_LOG_DT        
  AND L.RN <= 1000
  AND (L.CEHL_PICK_UP_IND IS NULL OR UPPER(L.CEHL_PICK_UP_IND) not in ('Y','P'))