Oracle SQL' OVER'分区错误

时间:2017-07-04 12:12:34

标签: sql oracle partition

我试图在Oracle上使用此代码并且错误输出。分区'声明突出显示。我该如何解决这个问题?

select 
case when b.c_1 = 1 then b.workkey else null end workkey,
b.total_value total_value,
b.namekey namekey
from (select distinct workkey,total_value,namekey, 
      rownum() over (partition by workkey) as c_1 
      from report.arturdup
     ) b

1 个答案:

答案 0 :(得分:1)

正确的功能是row_number()

select (case when b.c_1 = 1 then b.workkey end) as workkey,
       b.total_value as total_value,
       b.namekey as namekey
from (select distinct workkey, total_value, namekey,
             row_number() over (partition by workkey order by b.workkey) as c_1
      from report.arturdup
     ) b;

注意:您不需要子查询:

select (case when row_number() over (partition by workkey order by workkey) = 1
             then b.workkey
        end) as workkey,
       b.total_value,
       b.namekey
from report.arturdup;

注意:

  • 在大多数数据库中,order by是必需的(有些不是,但我总是使用order by
  • else NULL是多余的。
  • 您无需指定已经是列名称的列别名。
  • 我总是使用as作为列别名。
相关问题