Oracle11g 每次标志更改时增加行数

Oracle11g 每次标志更改时增加行数,oracle11g,oracle10g,Oracle11g,Oracle10g,我在Stack overflow中也看到过类似的帖子。。。 但我的问题是: 如果我的表在运行时执行时生成了一个标志,那么如何在每次标志更改时增加Grp_numbergenerate运行时 我的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_num

我在Stack overflow中也看到过类似的帖子。。。 但我的问题是:

如果我的表在运行时执行时生成了一个标志,那么如何在每次标志更改时增加Grp_numbergenerate运行时

我的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
不能引用同一选择列表中另一列中的列。您需要使用子查询来避免无效标识符错误

喜欢吗-

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)

看@sudhirHi Skizo,我以前也经历过。但由于我正在生成我的标志运行时,我无法使用该标志列进一步计算查询中的grp_编号。但由于我正在生成我的标志运行时,我无法使用该标志列进一步计算查询中的grp_编号。下面是我尝试过的查询,但由于标识符“flag”无效而出现错误:选择emp_id,flag,sumgap over partition by emp_id order by emp_id GRP_number,从选择emp_id开始,当MODrownum,30=1且rownum>1时,则选择“N”或“Y”结束作为标志,如果flag=LAGFALG over partition by emp_id order by emp_id然后0 else 1 end gap from TRANSACTION_table请更正我的错误。您不能引用同一选择列表中另一列中的列。您需要使用子查询来避免无效标识符错误。看到我的答案了。谢谢拉利特。。。但是,由于我在rownum上分配标志,输出变得不同,因为输出的顺序不一样。除了rownum之外,我是否有其他方法可以为每个记录分配30条标志。我没有得到预期的输出。您可以先在子查询中按顺序排序,然后在外部使用rownum。就像前n行一样。类似于,select*fromselect emp_id,rownum rn from table order by emp_id。此查询将为您提供已排序的行。