WENN LEFT JOIN keine Treffer, dann Join über anderes Feld

CT_SQL

Neuer Benutzer
Beiträge
3
Hi ich komme leider nicht weiter und brauche hilfe.
Ich möchte die Customer Tabelle an die SalesOrganisationHierarchy Joinen.
Nur möchte ich, dass wenn Kein Treffer möglich ist, über die SubsidiaryID gejoint wird:

Select * From Customer t1
LEFT JOIN SalesOrganisationHierarchy t2 ON t1.InhouseGroup = t2.LastLevel

Wenn kein Treffer, dann soll t1.SubsidiaryID = t2.LastLevel gejoined werden.

Vielen Dank im Vorraus
 
Werbung:
Select * From Customer t1
LEFT JOIN SalesOrganisationHierarchy t2 ON if(t1.InhouseGroup is NULL, t1.SubsidiaryID, t1.InhouseGroup) = t2.LastLevel
 
aber hier gehe ich ja davon aus, dass InhouseGroup NULL ist.
Aber das ist ja nicht der Fall.
Inhousegroup ist immer gefüllt.
Nur hat es nicht immer einen Treffer mit LastLevel
in dem Fall soll Subsidiary an LastLevel gejoint werden
 
Dann teste halt nicht auf "NULL" sonder auf den Wert in der ersten Tabelle:

Select * From Customer t1
LEFT JOIN SalesOrganisationHierarchy t2 ON if(
(select count(*) from t2 where t1.InhouseGroup = t2.LastLevel) = 0, t1.SubsidiaryID, t1.InhouseGroup) = t2.LastLevel

Aber die Experten werden bestimmt was besseres finden ...
 
SalesOrganisationHierarchy

LASTLEVEL Spalte A
Test1 Wert1
Test2 Wert2
xyz3 Wert3
xyz4 Wert4

Customer
InhouseGroup Spalte A SubsidiaryID
Test1 ABC1 xyz1
Test2 ABC2 xyz2
Test10 ABC3 xyz3
Test11 ABC4 xyz4

zu erwartende ergebnis:
Test1 Wert1 ABC1
Test2 Wert2 ABC2
xyz3 Wert3 ABC3
xyz4 Wert4 ABC4
 
Werbung:
Code:
postgres=# select * from sales;
 lastlevel | spalte1 
-----------+---------
 test1     | wert1
 test2     | wert2
 xyz4      | wert4
 xyz3      | wert3
(4 rows)

postgres=# select * from customer ;
 inhouse | spaltea | sid  
---------+---------+------
 test1   | abc1    | xyz1
 test2   | abc2    | xyz2
 test10  | abc3    | xyz3
 test11  | abc4    | xyz4
(4 rows)

postgres=# select sales.lastlevel , sales.spalte1, customer.spaltea from sales inner join customer on sales.lastlevel=customer.inhouse union all (select sales.lastlevel , sales.spalte1, customer.spaltea from sales inner join customer on sales.lastlevel=customer.sid);
 lastlevel | spalte1 | spaltea 
-----------+---------+---------
 test1     | wert1   | abc1
 test2     | wert2   | abc2
 xyz4      | wert4   | abc4
 xyz3      | wert3   | abc3
(4 rows)

postgres=#
 
Zurück
Oben