我试图在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
答案 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
作为列别名。