每次标志更改时增加行号

时间:2015-02-18 10:31:27

标签: oracle11g oracle10g

我在Stack溢出中经历过类似的帖子... 但我的疑问是:

如果我的表在运行时执行中生成一个标志,那么每次我的标志更改时如何增加Grp_number(生成运行时)。

我的Oracle查询:

Select emp_id,
Case when MOD(rownum/3)=1 and rownum>1 then 'Y' else 'N' as flag
from Transaction_table

所需的o / p数据格式:

emp_id    Flag    GRP_number
  1        N          1
  2        N          1
  3        N          1
  4        Y          2
  5        N          2
  6        N          2
  7        Y          3

1 个答案:

答案 0 :(得分:0)

您无法在同一选择列表中的另一列中引用列。您需要使用子查询来避免 INVALID IDENTIFIER 错误。

喜欢 -

WITH DATA AS(
SELECT emp_id,
    CASE
      WHEN MOD(rownum/3)=1
      AND rownum        >1
      THEN 'Y'
      ELSE 'N' AS flag
      FROM Transaction_table
  )
  SELECT emp_id, flag, SUM(gap) over (PARTITION BY person
                                            ORDER BY DAY) grp
     FROM(
          SELECT emp_id, flag,
                  CASE WHEN flag = lag(flag) over (PARTITION BY person
                                                   ORDER BY DAY)
                       THEN 0
                       ELSE 1
                  END gap
             FROM DATA)