CASE in SQL?

Bespreek het databaseprogramma
AliceWonders
Berichten: 14
Lid geworden op: za apr 30, 2016 9:57 pm

CASE in SQL?

Bericht door AliceWonders »

Hallo,

Ik wil graag een CASE - WHEN gebruiken in een SQLquery, maar mijn OO herkent het commando niet.. ?
Is het helemaal niet mogelijk, of moet ik er iets voor installeren?
Ik wil een waarde opslaan in een tabel naargelang een ander veld de waarde 1 of 2 terug geeft.
Open Office 4.1.2 op Windows 7
RPG
Berichten: 4711
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: CASE in SQL?

Bericht door RPG »

Hallo

Je zult dan waarschijnlijk een query in native mode moeten gebruiken. Ik heb op dit moment geen idee wat je bedoelt. Het beste is als je de query hier plaatst als kan een beetje leesbaar. Het is waarschijnlijk dat eremmel het beter weet dan ik. Het is beter wat meer details te geven in de vraag.

Romke
LibreOffice 24.2.4.2 op openSUSE Leap 15.6
AliceWonders
Berichten: 14
Lid geworden op: za apr 30, 2016 9:57 pm

Re: CASE in SQL?

Bericht door AliceWonders »

SELECT
"KindInvoer"."KindAchternaam",
"KindInvoer"."KindVoornaam",
"KindInvoer"."Geboortedatum",
"KlantenInvoer"."KlantID",
"KlantenInvoer"."Ouder"
CASEWHEN (klanteninvoer.ouder = 1, KindInvoer.Kindouder = KindInvoer.Vader, CASEWHEN(KlantenInvoer.Ouder=2, KindInvoer.Kindouder = Kindinvoer.Moeder))
FROM "KindInvoer", "KlantenInvoer"

Ik heb het zo geprobeerd, alsook met een CASE - WHEN - THEN - END


Op het invulformulier van "KlantenInvoer" staan 2 radiobuttons (moeder, vader), de waarde hiervan (1 voor vader en 2 voor moeder) wordt opgeslagen in KlantenInvoer.Ouder

Bij KindInvoer kunnen de vader en moeder geselecteerd worden in een dropdown. Deze waarde is gelinkt aan de KlantenInvoer.KlantID (primary key van die tabel)


Ik wil in het klantenoverzicht, in een subform, de juiste kinderen bij de juiste ouder tonen.
(Bij onze klanten is het vrij goed mogelijk dat moeder bvb 4 kinderen van 3 verschillende vaders heeft.. de 4 kinderen moeten dan bij moeder getoond worden, maar niet bij de huidige partner, maar wel bij de juiste vader)

Ik wil aan de hand van een IF (of CASE..) de KlantID van de vader of moeder opslaan in het veld KindInvoer.Kindouder, zodat ik KindInvoer.Kindouder als Slave kan koppelen.


De foutmelding:
1: Unexpected token CASE, requires FROM in statement [SELECT
"KindInvoer"."KindAchternaam",
"KindInvoer"."KindVoornaam",
"KindInvoer"."Geboortedatum",
"KlantenInvoer"."KlantID",
"KlantenInvoer"."Ouder"
CASE]

(zelfde bij CASEWHEN)
Open Office 4.1.2 op Windows 7
eremmel
Berichten: 670
Lid geworden op: di sep 01, 2009 10:11 am
Locatie: Barneveld, Nederland

Re: CASE in SQL?

Bericht door eremmel »

AliceWonders schreef:Hallo,

Ik wil graag een CASE - WHEN gebruiken in een SQLquery, maar mijn OO herkent het commando niet.. ?
Is het helemaal niet mogelijk, of moet ik er iets voor installeren?
Ik wil een waarde opslaan in een tabel naargelang een ander veld de waarde 1 of 2 terug geeft.
Het is niet gebruikelijk om 'afgeleide waarden' op te slaan als je die later nog kunt reconstrueren met een query. B.v. de totaal prijs van een order regel. Als je de gegevens opvraagt kun je die meestal wel door de query laten berekenen. Geldt dit ook voor dit probleem?

Zoals Romke al aangeeft is een voorbeeld handig omdat er te veel onduidelijk is in de vraagstelling voor ons.

Als je nog de interne database gebruikt HSQLDB 1.8 zoek dan naar "HSQLDB SQL syntax 1.8" dan vind je zo de pagina waar de syntax beschreven wordt.
--
Erik
W11 21H2 (build 22000), LO 7.4.1.2(x64)
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
AliceWonders
Berichten: 14
Lid geworden op: za apr 30, 2016 9:57 pm

Re: CASE in SQL?

Bericht door AliceWonders »

Zie mijn uitleg na de post van Romke

Is dat duidelijk uitgelegd?
Open Office 4.1.2 op Windows 7
RPG
Berichten: 4711
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: CASE in SQL?

Bericht door RPG »

Hallo
AliceWonders schreef:Op het invulformulier van "KlantenInvoer" staan 2 radiobuttons (moeder, vader), de waarde hiervan (1 voor vader en 2 voor moeder) wordt opgeslagen in KlantenInvoer.Ouder
Ik zou aanraden om je wat meer te richten op de radio button. Zoals ik het nu begrijp moet het daarin en daarmee opgelost. Misschien is het het beste om het te maken met de wizard voor een groepsbox.

Romke
LibreOffice 24.2.4.2 op openSUSE Leap 15.6
eremmel
Berichten: 670
Lid geworden op: di sep 01, 2009 10:11 am
Locatie: Barneveld, Nederland

Re: CASE in SQL?

Bericht door eremmel »

AliceWonders schreef:SELECT
"KindInvoer"."KindAchternaam",
"KindInvoer"."KindVoornaam",
"KindInvoer"."Geboortedatum",
"KlantenInvoer"."KlantID",
"KlantenInvoer"."Ouder"
CASEWHEN (klanteninvoer.ouder = 1, KindInvoer.Kindouder = KindInvoer.Vader, CASEWHEN(KlantenInvoer.Ouder=2, KindInvoer.Kindouder = Kindinvoer.Moeder))
FROM "KindInvoer", "KlantenInvoer"
Problemen,
1. Alle velden in SELECT-clause moet je scheiden door een komma
2. CASEWHEN true/false deel is een expressie en geen toekenning.
3. Als je zeker weet dat het veld klanteninvoer.ouder altijd gevuld is (definieer in database als NOT NULL) en de waarde 1 of 2 bevat, dan kun je met een enkele CASEWHEN werken
4. De relatie tussen "KindInvoer" en "KlantenInvoer" is niet gegeven dit levert je een [url=https://nl.wikipedia.org/wiki/Cartesisch_product]cartesisch product]/url] op.
Dit zou kunnen werken (behalve punt 4):

Code: Selecteer alles

SELECT 
"KindInvoer"."KindAchternaam", 
"KindInvoer"."KindVoornaam", 
"KindInvoer"."Geboortedatum", 
"KlantenInvoer"."KlantID", 
"KlantenInvoer"."Ouder" ,
CASEWHEN (klanteninvoer.ouder = 1, KindInvoer.Vader,  Kindinvoer.Moeder) as "Kindouder"
FROM "KindInvoer", "KlantenInvoer"
W11 21H2 (build 22000), LO 7.4.1.2(x64)
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
AliceWonders
Berichten: 14
Lid geworden op: za apr 30, 2016 9:57 pm

Re: CASE in SQL?

Bericht door AliceWonders »

Ok, de CASEWHEN gaat er nu wel door. Het klopt nog niet, maar wordt wel herkend.
Dus daar kan ik verder mee proberen... ga ook aan de gang met de radiobutton en groepsbox.
Thanks!
Open Office 4.1.2 op Windows 7
Plaats reactie