Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL:Wie man Werte gemäß Indexspalten hinzufügt

Nehmen wir nur 1 Hierarchieebene an. Bei mehreren Hierarchieebenen wird dies interessanter.

SELECT A.Value+coalesce(B.Value,0) as Value
     , A.Position
     , A.Relates_to_Position
     , A.Type
FROM Table A
LEFT JOIN Table B
  on B.Relates_To_Position = A.Position
WHERE A. Relate_to_Position is null

Was dies bewirkt, ist eine Selbstverknüpfung, sodass verwandte Datensätze in derselben Zeile platziert werden. Anschließend löscht es alle Datensätze mit einem Wert in „relevate_to_position“, da sie einer übergeordneten Zeile hinzugefügt werden.

Wir verwenden einen LEFT-Join, da nicht alle Datensätze einen verwandten Wert haben, und wir verwenden Coalesce, um sicherzustellen, dass nicht versucht wird, Nullen hinzuzufügen. (Coalesce nimmt den ersten Nicht-Null-Wert)

Sie sind sich nicht sicher, warum Sie related_To_Position zurückgeben müssen, da es IMMER null sein wird..