sql >> Database >  >> RDS >> Oracle

SQL:Waarden toevoegen volgens indexkolommen

Als we maar uitgaan van 1 hiërarchieniveau. Als er meerdere hiërarchische niveaus zijn, wordt dit 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

Wat dit doet, is een self-join, zodat gerelateerde records in dezelfde rij worden geplaatst. het verwijdert vervolgens al die records met een waarde in relate_to_position omdat ze worden toegevoegd aan een bovenliggende rij.

we gebruiken een LEFT join omdat niet alle records een gerelateerde waarde hebben en we gebruiken coalesce om ervoor te zorgen dat er geen null's worden toegevoegd. (samenvoegen neemt de eerste niet-null-waarde)

Ik weet niet zeker waarom je relate_To_Position moet retourneren, want het zal ALTIJD nul zijn..



  1. Query voor top N per groepscode werkt voor MySQL maar ander resultaat voor MariaDB

  2. Hoe maak je een snellere grootste-n-per-groep-query?

  3. Is er een manier om een ​​benoemde constante in een PostgreSQL-query te definiëren?

  4. Hoe rond je een gemiddelde af op 2 decimalen in PostgreSQL?