Verknüpfungen: Wie die Rückkehr der Standardwerte für leere rechten Seite der left outer join

In meiner Oracle-DB habe ich ein left outer join für einen übergeordneten Arbeitsauftrags der untergeordneten Arbeitsaufträge. Ich dann eine Berechnung durchführen SUMME() von einigen der untergeordneten Werte. Ich wickle die Ergebnisse aus der untergeordneten Arbeitsaufträge in der Nvl (), um sicherzustellen, Sie werden korrekt berechnet.

Dies funktioniert, außer, wenn es gibt keine untergeordneten Arbeitsaufträge für die Eltern. In diesem Fall wird der "null" zurückgegeben wird während der Anzeige sind, weil es keine Ergebnisse in der Verknüpfung, und so scheint es, dass die Nvl([Feldname],0) nicht konvertieren, Ihnen zu zeigen, 0. Also, wenn ich denke, dass die Summe der untergeordneten Werte mit der parent-Werte auch null zurück, durch hinzufügen eines Werts zu einem null-Wert.

Was ist der beste Weg, dies zu umgehen? Ist das etwas umgangen werden kann, oder ist es ein Geruch, dass etwas falsch mit meiner Abfrage grundsätzlich?

Die Abfrage

Sorry, ich bin nicht in der Lage, ein setup für es im moment. Für diese spezifischen Arbeitsauftrags (hart-codiert), die "Rechte hand" Teil der join leer ist, weil die Eltern keine Kinder hat, und zeigt damit an, null.

SELECT *
FROM   (SELECT *
        FROM   R_PCR_ALLWOSANDTASKSSEPARATELY)WOINFO
       LEFT OUTER JOIN (SELECT WORKORDERNUMBER                AS TASKWORKORDRENUMBER
                               , PARENT                       AS TASKPARENT
                               , NVL(TOTALMATESTCOSTFORWO, 0) AS TOTALMATESTCOSTFORWO_TASK
                               , NVL(TOTALLABESTCOSTFORWO,0)         AS TOTALLABESTCOSTFORWO_TASK
                               , NVL(TOTALMATACTCOSTFORWO,0)         AS TOTALMATACTCOSTFORWO_TASK
                               , NVL(TOTALLABACTCOSTFORWO,0)         AS TOTALLABACTCOSTFORWO_TASK
                               , NVL(TOTALLABACTHOURSFORWO,0)        AS TOTALLABACTHOURSFORWO_TASK
                        FROM   R_PCR_ALLWOSANDTASKSSEPARATELY)TASKINFO
         ON ( WOINFO.WORKORDERNUMBER = TASKINFO.TASKPARENT )
WHERE  WORKORDERNUMBER = '2826059'; 
InformationsquelleAutor SeanKilleen | 2012-03-02
Schreibe einen Kommentar