2017-02-21 4 views
-1
SELECT pstartdate, 
     opbal, 
     joined, 
     resign, 
     (opbal + joined - resign) clbal 
     , 
     (Round(((resign * 100)/(opbal + joined))/100, 2) * 100 
     ) attriation 
FROM (SELECT pstartdate, 
       penddate, 
       Getopempbal(pstartdate)   OpBal, 
       Getempjn(pstartdate, penddate) Joined, 
       Getempres(pstartdate, penddate) Resign 
     FROM (SELECT Add_months(:startdate, LEVEL - 1) pstartdate, 
         Add_months(:startdate, LEVEL) - 1 penddate 
       FROM dual 
       CONNECT BY LEVEL <= Months_between(:enddate, :startdate) + 1)) 
ORDER BY To_number(1) 

Wenn ich diese Abfrage Fehler ausgeführt kamwas ist der Teiler in plsql gleich null?

Divisor gleich Null ist.

Ich denke, Fehler dieser Ort

(round(((resign*100)/(opbal+joined))/100,2)*100) attriation

+0

Der Fehler besagt, dass Sie nicht durch 0 dividieren können. Das bedeutet opbal + joined = 0 – SaggingRufus

+0

Verwenden Sie MySQL, MS SQL Server oder Oracle? Markieren Sie keine nicht betroffenen Produkte. – jarlh

+0

Formatieren Sie richtig. Wenn Sie bearbeiten, markieren Sie den Code und klicken Sie auf '{}'. – jarlh

Antwort

-2
SELECT pstartdate, 
     opbal, 
     joined, 
     resign, 
     (opbal+joined-resign) clbal, 
     round((**NULLIF**(resign,0) *100)/(opbal + joined)) ab 
FROM 
    (SELECT pstartdate, 
      penddate, 
      getopempbal(pstartdate) opbal, 
      getempjn(pstartdate,penddate) joined, 
      getempres(pstartdate,penddate) resign 
    FROM 
    (SELECT add_months(:startdate, LEVEL-1) pstartdate, 
      add_months(:startdate, LEVEL)-1 penddate 
     FROM dual CONNECT BY LEVEL <= months_between(:enddate, :startdate) + 1)) 
ORDER BY to_number(1) 
+0

Verwenden Sie nullif, um die Antwort zu erhalten –

+0

Das Problem - wie der Fehler sagt - ist mit dem Divisor, nicht der Divdend. Sie haben Ihr Nullif um den falschen Ausdruck. –

3

Ich empfehle, dass Sie die nullif() Funktion verwenden, wenn Teilung zu tun:

select . . . 
     (Round(((resign * 100)/nullif(opbal + joined, 0))/100, 2) * 100 
     ) attriation 

Das gibt NULL wenn der Nenner Null ist .

Verwandte Themen