meerdere case when gebruiken in SQL

Bespreek het databaseprogramma

meerdere case when gebruiken in SQL

Berichtdoor pkoore01 » vr jan 03, 2020 2:19 pm

Hallo, ik hoop dat iemand me hier met het volgende kan helpen. :D

Ik wil van 4 kolommen (1 tabel) een enkele kolom maken.
De kolommen zijn Titvcode, Voorlet, Voorvoegsel, Achternm.
Nu is de kolom Titvcode en de kolom Voorvoegsel niet altijd gevuld.
Wanneer ik 1 Case maak: CASE WHEN TITVCODE IS NULL THEN (VOORLET + ' ' + VOORVOEGSEL + ' ' + ACHTERNM) ELSE (TITVCODE + '. ' + VOORLET + ' ' + VOORVOEGSEL + ' ' + ACHTERNM) END AS VOLNAAM dan krijg ik logischerwijs in de kolom VOLNAAM enkel de persoon Zonder Titvcode.
Gebruik ik de Case: CASE WHEN VOORVOEGSEL IS NULL THEN (TITVCODE + '. ' + VOORLET + ' ' + ACHTERNM) WHEN LEN(VOORVOEGSEL) = 0 THEN (TITVCODE + '. ' + VOORLET + ' ' + ACHTERNM) ELSE (TITVCODE + '. ' + VOORLET + ' ' + VOORVOEGSEL + ' ' + ACHTERNM) END AS VOLNAAM dan krijg ik alles behalve de personen die geen Titvcode hebben. :crazy:

Mijn vraag is, hoe kan ik beide Case when gebruiken zodat ik zowel de personen zonder titelatuur zie EN de volledige naam van de personen welke een voorvoegsel hebben.
Alvast heel veel dank voor de hulp
OpenOffice 3.1 op Windows
pkoore01
 
Berichten: 1
Geregistreerd: vr jan 03, 2020 2:05 pm

Re: meerdere case when gebruiken in SQL

Berichtdoor RPG » vr jan 03, 2020 4:04 pm

Voorlopig is deze reactie meer nog een inleiding om wat meer begrip te krijgen van de vraag.
Als ik goed begrijp moet er altijd het volgende komen te staan:
Code: Selecteer alles   UitklappenInklappen
TITVCODE + '. ' + VOORLET + ' ' + VOORVOEGSEL + ' ' + ACHTERNM
Er is wel een voorwaarde en dat is als er lege velden zijn moeten er geen overbodige spaties staan.

HSQLDB 1.8.10 heeft een mooie functies die waarschijnlijk eenvoudig voor elkaar kan maken dat het TITVCODE en '. ' alleen afgedrukt worden wanneer het veld TITVCODE <> aan NULL.

De eigenschap NULL in een database veld heeft een bijzondere eigenschap namelijk dat wat er ook aan bewerking gedaan wordt het eind resultaat in het algemeen NULL is.

Ik zou zeggen ga eens oefenen de functie
COALESCE. Ik zal er ook een uitwerking bij doen maar ik heb die niet daadwerkelijk getest:
Code: Selecteer alles   UitklappenInklappen
COALESCE( TITVCODE || '. ' , '')
Als je een goede formule hebt gevonden. De twee staande strepen is SQL taal voor het samenvoegen van een tekst.

Ik heb het idee dat het geheel als volg moet kunnen werken
Code: Selecteer alles   UitklappenInklappen
COALESCE( TITVCODE || '. ' , '') ||
   COALESCE( VOORLET || ' ' , '') ||
   COALESCE( VOORVOEGSEL || ' ' , '') ||
   COALESCE( ACHTERNM || ' ' , '')  as VOLNAAM
   
-- twee platte streepjes is commentaar
-- '' staat voor enkelvoudige aanhalings tekens voor echte tekst in dit geval een lege string. Een lege string is niet gelijk aan een NULL waarde
Ik heb bovenstaande code niet getest
LibreOffice 6.3.3.2.0 op openSUSE Leap 15.1
RPG
 
Berichten: 4087
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland


Keer terug naar Base

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron