Avatar billede iziqio Nybegynder
25. september 2006 - 20:43 Der er 12 kommentarer og
2 løsninger

Sorter efter dato men null skal til sidst

Hvordan sortere jeg efter dato og med den "mindste" først, tvisten er at de rækker med null i dato skal til sidst...

De kommer jo først når jeg sotere med ASC
Avatar billede mugs Novice
25. september 2006 - 20:45 #1
I hvilken type databaseobjekt:

- Forespørgsel
- Formular
- Rapport
Avatar billede iziqio Nybegynder
25. september 2006 - 20:46 #2
Forespørgsel, hvis det kan lade sig gøre ...
Avatar billede mugs Novice
25. september 2006 - 20:53 #3
I en forespørgsel har du jo kun 2 muligheder for sortering ASC eller DESC. I formularer / rapporter kan du indsætte underformularer / underrapporter som et supplement til main-objektet.

Men lad spørgsmålet stå åbent og lad os se, om ikke der kommer en haj med den gyldne løsning :o)
Avatar billede iziqio Nybegynder
25. september 2006 - 20:56 #4
Men en ASC sortering, løser jo ikke problemet ... Den putter jo alle de tomme øverst
Avatar billede mugs Novice
25. september 2006 - 21:29 #5
I en formular / rapport kan du sortere efter dato og indsætte et kriterie hvor dato ikke må være Null. I underobjektet kan du så indsætte et kriterie hvor dato SKAL være Null.
Avatar billede iziqio Nybegynder
25. september 2006 - 21:34 #6
Hvordan ser VB koden ud til det?
Jeg har brugt en SQl sætning som tar værdien fra en dropdown, så det skal jeg lige have flettet ind i dit svar. Kan Access "oversætte" dit forslag til VB kode?

For man kan ikke løse det på en almindelig SQL vel? Der skal to til ikke?
Avatar billede mugs Novice
25. september 2006 - 22:12 #7
Du behøver ikke at kode det i VBA. Du laver simpelthen en rapport der baseres på en forespørgsel (forespørgsel1) hvor dato er sorteret ASC og ikke må være Null. Derefter en ny forespørgsel (forespørgsel2) hvor dato skal være Null. Åbn din rapport og tag en underrapport fra din værktøjskasse og giver den postkilden forespørgsel2. Tilbage er der kun at lave formatteringen, så det ser pænt ud.
Avatar billede kjulius Novice
25. september 2006 - 22:20 #8
Du kunne jo også f.eks. erstatte null med en meget stor dato:

SELECT *
FROM dinTabel
ORDER BY IIf(dato Is Null, Date("31.12.2199"), dato)
Avatar billede kjulius Novice
25. september 2006 - 23:08 #9
Okay, det holder vist ikke helt, så her en update:

SELECT *
FROM dinTabel
ORDER BY IIf(dato Is Null, CDate("31 dec 2199"), dato)
Avatar billede iziqio Nybegynder
26. september 2006 - 19:16 #10
Tak til jer begge. kjuliu smid et svar så fordeler jeg point.
Avatar billede kjulius Novice
26. september 2006 - 20:33 #11
Okay... :-)
Avatar billede kjulius Novice
27. september 2006 - 23:53 #12
Må vist desværre endnu engang korrigere mig selv lidt:

SELECT *
FROM dinTabel
ORDER BY IIf(IsNull(dato), CDate("31 dec 2199"), dato)
Avatar billede kjulius Novice
28. september 2006 - 00:03 #13
Både notationen IsNull(felt) og felt Is Null fungerer i en forespørgsel. Så både mit indlæg fra 25/09-2006 23:08:32, som viser en standard SQL måde at teste for null, og mit indlæg fra 27/09-2006 23:53:14, som bruger VBA funktionen IsNull er lige gode. Beklager forvirringen... :-(
Avatar billede rvn Nybegynder
29. september 2006 - 02:01 #14
Du bliver nødt til at lave et felt på din tabel, som angiver sorteringsrækkefølgen. Lad os kalde feltet "NullDateSortOrder"
Sæt standardværdien i tabellen til 0, hvilket så vil være være værdien i alle de tilfælde hvor datoen ikke er sat.
Idet du sætter datoen, sørger du for samtidig at opdatere NullDateSortOrder til værdien 1. Jeg antager at du har styr på, hvordan du kan gøre dette vha. VBA eller en opdateringsforespørgsel.

For at få dit ønskede resultat i en forespørgsel, skal du nu bare sortere på NullDateSortOrder før datoen.

SELECT *
FROM DinTabel
ORDER BY NullDateSortOrder DESC, dato;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester