17. december 2007 - 16:10Der er
10 kommentarer og 1 løsning
Sortering af SQL udtræk fra Access
Hej eksperter,
Jeg har en tabel i en Access database med følgende felter:
Tabel: ----- Invoices
Felter: ------ ID CustomerID
Samme CustomerID kan sagtens stå flere gange i samme tabel, så hvordan udtrækker jeg en liste, hvor alle ID'er tilhørende samme CustomerID står efter hinanden, men sorteret i ID orden, ikke CustomerID orden ?
Altså en liste hvor jeg finder f.eks. ID-1 som har CustomerID-45. Her udskriver jeg så alle de ID'er som har samme CustomerID. Dernæst går jeg videre til ID-2 og lister alle de ID'er som har denne CustomerID osv. UDEN at samme CustomerID så fremkommer igen længere nede på listen ?
Nej for hvis jeg sorterer customerid,id så får jeg en liste sorterer efter customerid. Jeg vil have den kunde med det mindste ID først og derefter den kunde med det næstmindste ID osv
Sorterer jeg id,customerid får jeg jo bare listen som den er sat ind i Access.
Jeg vil finde det mindste ID og udskrive alle de ID'er der så har samme customerID som det mindste ID. Derefter vil jeg finde det næstmindste ID, som ikke allerede er udskrevet og så liste alle de ID'er med samme CustomerID som det.
Hver CustomerID skal kun udskrives EN gang med alle de ID'er som tilhører den: CustomerID ID 1 ID 5 ID 7 ID 9 osv.
Det er nemt nok, men hvordan får jeg det CustomerID med det lavest tilhørende ID til at stå øverst ? Altså så Customer ID 34 med ID'erne 1,5 og 7 står før Customer ID 2 med ID'erne 3 og 4 ? Fordi Customer ID 34 har ID nr. 1, som er mindre end Customer ID 2's mindste ID, nemlig 3
Ok ... tror heller ikke det kan gøre i sql'en ... her er et kort forslag ...
Hvis du først lave en
strsql = "SELECT distinct customerid from tabel"
Og dernæst en
strsql = "SELECT * FROM tabel ORDER BY id ASC"
I selve bodyen kan du så køre noget i stil med dette ...
Do While Not CIDrs.EOF Response.write CIDrs("customerid") Do While Not IDrs.EOF If CIDrs("customerid")=IDrs("customerid") Then Response.write IDrs("id") End if IDrs.MoveNext Loop CIDrs.MoveNext Loop
SELECT i.ID, s.CustomerID FROM Invoices AS i INNER JOIN ( SELECT CustomerID, MIN(ID) AS minid FROM Invoices GROUP BY CustomerID ORDER BY MIN(ID) ) AS s ON s.CustomerID = i.CustomerID ORDER BY s.minid, i.ID
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.