Oracle SQL – Extraño ‘ORA-00907 Faltan Paréntesis Derecho’ error

He escrito una consulta a prueba a cabo una regresión lineal simple para obtener la línea de mejor ajuste entre dos conjuntos de medidas de peso. Se espera debe devolver los resultados, como el de abajo, pero es tirar un error extraño

‘ORA-00907 Faltan Paréntesis Derecho’

y el SAPO está apuntando hacia la parte donde dice:

case ( when trn.wid_location = 28.3 then 

He estado peinando por falta paréntesis, pero no creo que ese es el problema, porque si puedo reemplazar la instrucción case con

100 as mine,

que desaparezca el error y se ejecuta la consulta.

Los pensamientos?

Saludos,

Tommy

select
      decode(wid_location,28.3,'CL',29.6,'DA') as site,
      (n*sum_xy - sum_x*sum_y)/(n*sum_x_sq - sum_x*sum_x) as m,
      (sum_y - ((n*sum_xy - sum_x*sum_y)/(n*sum_x_sq - sum_x*sum_x))*sum_x)/n as b 

from (
        select 
               wid_location,
               sum(wids) as sum_x,
               sum(mine) as sum_y,
               sum(wids*mine) as sum_xy,
               sum(wids*wids) as sum_x_sq,
               count(*) as n

        from (                                                                        
                select 
                       trn.wid_location,
                       con.empty_weight_total as wids,                                                                    
                       case ( 
                              when trn.wid_location = 28.3 then con.empty_weight_total*0.900-1.0
                              when trn.wid_location = 29.6 then con.empty_weight_total*0.950-1.5
                              end                
                            ) as mine   

                from widsys.train trn
                     inner join widsys.consist con
                     using (train_record_id)

                where mine_code = 'YA'
                      and to_char(trn.wid_date,'IYYY') = 2009
                      and to_char(trn.wid_date,'IW') = 29

                                 )

        group by wid_location
     )

Y aquí están los resultados, yo estaría feliz de ver

--    +----------+--------+----------+
--    | SITE     | M      | B        |
--    +----------+--------+----------+
--    | CL       | 0.900  | -1.0     |
--    +----------+--------+----------+
--    | DA       | 0.950  | -1.5     |
--    +----------+--------+----------+
InformationsquelleAutor | 2009-08-07

2 Kommentare

  1. 5

    T pensar en la sintaxis del caso no es la correcta.

    Hacer algo como:

    SELECT last_name, commission_pct,
      (CASE commission_pct 
        WHEN 0.1 THEN Low 
        WHEN 0.15 THEN Average
        WHEN 0.2 THEN High 
        ELSE N/A 
      END ) Commission
    FROM employees ORDER BY last_name; 
  2. 1

    De tratar de deshacerse de ambos paréntesis en el caso de la declaración. Usted no los necesita.

    Puede ser:

    case  when trn.wid_location = 28.3 then con.empty_weight_total*0.900-1.0
          when trn.wid_location = 29.6 then con.empty_weight_total*0.950-1.5 end as mine 

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea