meerdere case when gebruiken in SQL

Bespreek het databaseprogramma
pkoore01
Berichten: 1
Lid geworden op: vr jan 03, 2020 2:05 pm

meerdere case when gebruiken in SQL

Bericht door pkoore01 »

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
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: meerdere case when gebruiken in SQL

Bericht door RPG »

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

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

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

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 7.4.3.2 op openSUSE Leap 15.4
Plaats reactie