2009-08-07 6 views
1

Ich habe eine Abfrage geschrieben, um eine einfache lineare Regression zu testen, die Linie der besten Anpassung zwischen zwei Sätzen von Gewicht Maßnahmen zu erhalten. Es sollte hoffentlich Ergebnisse zurück wie unten, aber es ist einen seltsamen FehlerOracle SQL - Strange ‚ORA-00907 Fehlende rechte Klammer‘ Fehler

‚ORA-00907 Fehlenden rechte Klammer‘

werfen und TOAD zeigt zum Teil, wo es heißt:

case (when trn.wid_location = 28.3 then 

Ich habe es für fehlende Klammern gekämmt, aber ich glaube nicht, dass das das Problem ist, denn wenn ich die Case-Anweisung durch

ersetzen

Der Fehler verschwindet und die Abfrage wird ausgeführt.

Irgendwelche Gedanken?

Cheers,

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 
    ) 

Und hier sind die Ergebnisse, die ich gerne sehen würde

-- +----------+--------+----------+ 
-- | SITE  | M  | B  | 
-- +----------+--------+----------+ 
-- | CL  | 0.900 | -1.0  | 
-- +----------+--------+----------+ 
-- | DA  | 0.950 | -1.5  | 
-- +----------+--------+----------+ 

Antwort

5

T denken, die Syntax des Falles nicht korrekt ist.

Sie so etwas wie:

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; 
+0

wow. Das war jetzt ein dummer Moment für mich. –

1

Versuchen beiden Pars im Fall Aussage loszuwerden. Du brauchst sie nicht.

Es kann sein:

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