SQL adressen ophalen uit tabel met dubbel gebruikte velden

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • wsql
  • Registratie: Juni 2021
  • Laatst online: 24-06-2021
Goedendag,

ik heb een vraag over het ophalen van adresgegevens uit Exact Globe. Een relatie in Exact kent 4 adressen, o.a. een POS (postadres) en een VIS (bezoekadres).
De adressen staan in de tabel Addresses, veel andere relatiegegevens in de tabel cicmpy.
Ik heb de tabellen gekoppeld met de account sleutel.

LEFT JOIN Addresses ON cicmpy.cmp_wwn = Addresses.Account


Het vervelende is dat in de tabel addresses elke type adres gebruik maakt van hetzelfde veld, ik heb dus 4 verschillende waardes in het AddressLine1. Deze worden in de tabel onderscheiden door het Type (dus POS, VIS ed.)
Wil ik het postadres ophalen wat staat in het veld AddressLine1 dan moet ik dus iets doen met het type maar mijn Join neemt alle type's. Het lukt wel op alleen te koppelen op bv het type 'POS' maar dan kan ik de adressen van het bezoekadres (VIS) niet ophalen.

Wat ik niet snap is hoe ik nu het adresveld (AddressLine1) van het juiste type POS of VIS uit de tabel kan ophalen. Ik heb onderstaande gedaan maar dit gaat niet goed.

Bijkomend probleem is dat de adresvelden niet consequent gevuld zijn, soms staat het adres op AddressLine1 en dan weer op AddressLine2. De code moet dus ook dit meenemen, als 1 is leeg dan 2

,CASE WHEN Addresses.Type = 'POS' THEN
CASE WHEN Addresses.AddressLine1 = '' OR Addresses.AddressLine1 IS NULL
THEN Addresses.AddressLine2
ELSE '' END END AS PPostadres


Wat ik eigenlijk zoek is de code om de relatie te leggen naar het juiste type adres maar hoe doe ik dat?

Is het b.v. mogelijk om 2 joins naar dezelfde tabel te maken maar de tabel dan anders te noemen:

Als voorbeeld:
LEFT JOIN Addresses on cicmpy.cmp_wwn = Addresses.Account AND Addresses.Type = 'VIS' -> als Bezoekadres
LEFT JOIN Addresses on cicmpy.cmp_wwn = Addresses.Account AND Addresses.Type = 'POS' -> als Postadres


B.v.d. voor jullie support.

Afbeeldingslocatie: https://tweakers.net/i/VwzvOroXuFfkGzva_p5jr4MIz0k=/800x/filters:strip_icc():strip_exif()/f/image/itvzqzJsnTS2ClMaArfGpLla.jpg?f=fotoalbum_large

[ Voor 9% gewijzigd door wsql op 11-06-2021 15:41 . Reden: plaatje toegevoegd ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • MrTinux
  • Registratie: December 2000
  • Laatst online: 18:16

MrTinux

Terug van nooit weggeweest.

wsql schreef op vrijdag 11 juni 2021 @ 15:39:
Is het b.v. mogelijk om 2 joins naar dezelfde tabel te maken maar de tabel dan anders te noemen:

Als voorbeeld:
LEFT JOIN Addresses on cicmpy.cmp_wwn = Addresses.Account AND Addresses.Type = 'VIS' -> als Bezoekadres
LEFT JOIN Addresses on cicmpy.cmp_wwn = Addresses.Account AND Addresses.Type = 'POS' -> als Postadres
Yes, je kan gebruik maken van aliassen.

Zoiets:
SQL:
1
2
3
4
5
6
7
8
SELECT
  cicmpy.*,
  VisitorAddresses.AddressLine AS Bezoekadres,
  PostalAddresses.AddressLine AS Postadres
FROM
  cicmpy
  LEFT JOIN Addresses AS VisitorAddresses on cicmpy.cmp_wwn = VisitorAddresses.Account AND VisitorAddresses.Type = 'VIS'
  LEFT JOIN Addresses AS PostalAddresses on cicmpy.cmp_wwn = PostalAddresses.Account AND PostalAddresses.Type = 'POS'

[ Voor 3% gewijzigd door MrTinux op 11-06-2021 16:00 ]

"Hij doet 't niet" = onvolledige informatie


Acties:
  • 0 Henk 'm!

  • erwn
  • Registratie: November 2020
  • Niet online
De combinatie van genoemde aliassen en met case/when in select clause zou dan moeten volstaan. Je krijgt dan een case/when per type.

Acties:
  • +1 Henk 'm!

  • wsql
  • Registratie: Juni 2021
  • Laatst online: 24-06-2021
MrTinus en Erwn, hartelijk bedankt, het werkt helemaal zoals het moet.

Als ik dit dan zo zie denk, tja dat ik daar zelf niet op kom. Ik heb wel met AS in de join zitten stoeien maar had deze er achter gezet.

In ieder geval bedankt, ik kan rustig het weekend in.

Acties:
  • 0 Henk 'm!

  • erwn
  • Registratie: November 2020
  • Niet online
wsql schreef op vrijdag 11 juni 2021 @ 17:14:
MrTinus en Erwn, hartelijk bedankt, het werkt helemaal zoals het moet.

In ieder geval bedankt, ik kan rustig het weekend in.
Mooi :)