我在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
答案 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)