Pagina 1 van 1

CASE in SQL?

BerichtGeplaatst: di mei 03, 2016 9:52 pm
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.

Re: CASE in SQL?

BerichtGeplaatst: di mei 03, 2016 10:04 pm
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

Re: CASE in SQL?

BerichtGeplaatst: di mei 03, 2016 10:27 pm
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)

Re: CASE in SQL?

BerichtGeplaatst: di mei 03, 2016 10:36 pm
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

Re: CASE in SQL?

BerichtGeplaatst: di mei 03, 2016 10:53 pm
door AliceWonders
Zie mijn uitleg na de post van Romke

Is dat duidelijk uitgelegd?

Re: CASE in SQL?

BerichtGeplaatst: wo mei 04, 2016 8:31 am
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

Re: CASE in SQL?

BerichtGeplaatst: wo mei 04, 2016 9:38 am
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   UitklappenInklappen
SELECT
"KindInvoer"."KindAchternaam",
"KindInvoer"."KindVoornaam",
"KindInvoer"."Geboortedatum",
"KlantenInvoer"."KlantID",
"KlantenInvoer"."Ouder" ,
CASEWHEN (klanteninvoer.ouder = 1, KindInvoer.Vader,  Kindinvoer.Moeder) as "Kindouder"
FROM "KindInvoer", "KlantenInvoer"

Re: CASE in SQL?

BerichtGeplaatst: wo mei 04, 2016 9:09 pm
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!