[access] sql max bij lege tabel

Pagina: 1
Acties:

  • dmnq
  • Registratie: Januari 2000
  • Laatst online: 04-11-2025

dmnq

zonder klinkers

Topicstarter
Ik heb een tabel (test) met twee kolommen: ID, Waarde

Nu doe ik een simpele query:

select (max(Waarde)+1) as MaxWaarde from test

Dit gaat goed... alleen niet wanneer er nog geen rijen in de tabel staan.
Dan krijg je namelijk nix terug.

Ik wil dus dit:
- als er records --> dan de hoogste waarde pakken en met 1 verhogen
- anders --> 1 teruggeven

Dit moet in 1 query i.v.m. reeds geprogrammeerde code.

Hoe ga ik dit doen??

Hosting (100 MB Harddisk, 1 GB Traffic, 5 POP, MySQL, PHP voor € 3,60 per maand)


Verwijderd

Oke! opgelost!

Maak 2 query's

Query1:

SELECT Max(table1.waarde) AS MaxOfwaarde
FROM table1;

Query2:

SELECT IIf(IsNull([MaxOfwaarde]),1,[MaxOfwaarde]+1) AS Lentini
FROM Query1;

Query2 heb je nodig!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:24
Blijkbaar wil je dat doen om de nieuwe waarde van de PK te berekenen?
Dat vind ik eigenlijk geen goed idee, je kunt beter auto-nummering gebruiken.

Ik weet dat je in Oracle een functie hebt om null-values een andere waarde te geven.
Bv, in jouw geval zou je dan kunnen specifieren in je query indien waarde = null, waarde = 1.
Misschien heb je in Access ook wel zo'n functie. (Ja dus. ;) )

https://fgheysels.github.io/


Verwijderd

hmm... je was me net voor :P

  • dmnq
  • Registratie: Januari 2000
  • Laatst online: 04-11-2025

dmnq

zonder klinkers

Topicstarter
Lentini:
- het mag maar 1 query zijn

whoami:
- het is niet voor PK berekening, andere functie (is nu niet belangrijk)
- wat is die functie dan in Access (als je het weet.... please zeg het me??)

Hosting (100 MB Harddisk, 1 GB Traffic, 5 POP, MySQL, PHP voor € 3,60 per maand)


Verwijderd

oke zo dan:

SELECT IIf(IsNull(Max(table1.waarde)),1,Max(table1.waarde)+1) AS Lentini
FROM table1;

Wel een beetje creatief zijn he ;)

  • dmnq
  • Registratie: Januari 2000
  • Laatst online: 04-11-2025

dmnq

zonder klinkers

Topicstarter
ik heb zelf al zitten kijken naar de functie MAXA, maar dat schijnt niet te werken...

ik probeerde dit:
select maxa(max(Waarde)+1;1) as MaxWaarde from test

Hosting (100 MB Harddisk, 1 GB Traffic, 5 POP, MySQL, PHP voor € 3,60 per maand)


  • dmnq
  • Registratie: Januari 2000
  • Laatst online: 04-11-2025

dmnq

zonder klinkers

Topicstarter
Lentini:

Ik ben eigenlijk iets heel stoms vergeten te zeggen. De query moet ook op MSSQL kunnen worden uitgevoerd. En die kent geen IIf functie... :(

Hosting (100 MB Harddisk, 1 GB Traffic, 5 POP, MySQL, PHP voor € 3,60 per maand)


Verwijderd

oww tja da veranderd de zaak

  • Unipuma
  • Registratie: Juli 2001
  • Laatst online: 06-04-2021
Op MSSQL moet je gebruik maken van COALESCE
COALESCE(MAX(Waarde)+1,1) geeft MAX(Waarde)+1 als Waarde niet NULL is, anders krijg je 1 terug.
Helaas werkt COALESCE weer niet op Access.

So much fun, it's a miracle it isn't declared illegal: driving a motorcycle


  • dmnq
  • Registratie: Januari 2000
  • Laatst online: 04-11-2025

dmnq

zonder klinkers

Topicstarter
ik word moedeloos hiervan :'(

Hosting (100 MB Harddisk, 1 GB Traffic, 5 POP, MySQL, PHP voor € 3,60 per maand)

Pagina: 1