2017-07-04 1 views
0

J'essaie d'utiliser ce code sur Oracle et il des erreurs. L'instruction 'partition' est en surbrillance. Comment puis-je réparer ça ?Oracle SQL 'OVER' erreur de partition

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 

Répondre

1

La fonction correcte est 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; 

Note: Vous n'avez pas besoin d'un sous-requête pour cela:

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; 

Notes:

  • Dans la plupart des bases de données , order by est requis c'est pas, mais j'utilise toujours order by.
  • else NULL est redondant.
  • Vous n'avez pas besoin d'affecter un alias de colonne qui est déjà le nom de la colonne. J'ai toujours utilisé as pour les alias de colonne.