Ik heb een twee if statements waar twee voorwaarden inzitten. Maar ik krijg de foutmelding:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ') THEN
Prijs*0.95 as Verlaagd_5
IF(DatumTot='0000-00-00' AND v.NrVertrek=2' at line 2
De code is gemaakt in mysql.
De bedoeling is dat als de datum 0000-00-00 is en vertreknummer = 1 dat er dan 5 procent van de prijs afgaat.
en als de datum 0000-00-00 is en vertreknummer is 2 dan 20 procent van de prijs afgaat.
de code is:
SELECT vp.DatumTot, vp.Prijs,
IF(DatumTot='0000-00-00' AND v.NrVertrek=1) THEN
Prijs*0.95 as Verlaagd_5
IF(DatumTot='0000-00-00' AND v.NrVertrek=2) THEN
Prijs*0.80 as Verlaagd_20
end IF
FROM prijs vp, voertuig v;
Elk IF-statement heeft een END IF nodig, als je IF-statements wilt combineren zul je dit met een ELSE moeten doen.
Je zou eerst kunnen controleren of DatumTot gelijk is aan '0000-00-00' en vervolgens v.NrVertrek. Indien deze kolom enkel de waarde 1 of 2 kan hebben is dit natuurlijk niet zo lastig (indien deze waarde niet 1 is, impliceert dit in dat geval dat de waarde 2 is).
Wel lijkt het mij verstandig om rekening te houden met situaties waarin deze condities niet opgaan - zijn Verlaagd_5 en Verlaagd_20 dan ongedefinieerd?
ok, ik begrijp niet helemaal hoe je dit voor ogen ziet: "Elk IF-statement heeft een END IF nodig, als je IF-statements wilt combineren zul je dit met een ELSE moeten doen"
SELECT vp.DatumTot, vp.Prijs,
IF(DatumTot='0000-00-00' AND v.NrVertrek=1) THEN
Prijs*0.95 as Verlaagd_5
elseIF(DatumTot='0000-00-00' AND v.NrVertrek=2) THEN
Prijs*0.80 as Verlaagd_20
end IF
FROM prijs vp, voertuig v;
SELECT IF(a > 10) THEN 10 ELSE 0 END IF AS dewaarde
FROM ...
In het geval van een verlaagd tarief, zou je dus niet afzonderlijk ofwel een Verlaagd_5 of een Verlaagd_20 in je resultset krijgen, maar zou ik gaan voor Verlaagd.
SELECT vp.DatumTot, vp.Prijs,
IF(DatumTot = '00' AND v.NrVertrek=1)
THEN
Prijs*.95
ELSEIF(DatumTot='0000-00-00' AND v.NrVertrek=2) THEN
Prijs * 0.80
END IF AS Verlaagd
FROM prijs
Waarbij in het geval de datum niet 00000 is (raar formaat, waarom niet NULL?)
Verlaagd NULL zal zijn, tenzij je nog een ELSE toevoegd