25. november 2003 - 23:19Der er
12 kommentarer og 1 løsning
ORDER BY speciel
Hejsa Eksperter
Kan det lade sig gøre at lave en ORDER BY, som ikke sorterer alfabetisk, men efter en forudbestemt rækkefølge?
Har følgende ord, TOP, KERNE, BASIS, NY, STAND BY, i en kolonne, og vil gerne at alle poster med ordet TOP kommer først, dernæst alle poster med ordet KERNE. Eller er det bare umuligt???
PS. Arbejder pt. med Access men skal snart flytte til MS SQL2000 - så det skal helst virke på begge, hvis muligt?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Det nemmeste ville vare at lave en ekstra kolonne, som kunne hedde f.eks. Rækkefølge. Feltet skal være nummrerisk, hvorefter du manuelt kan angive den rækkefølge, du ønsker.
select * from t1 where felt = 'TOP' union select * from t1 where felt = 'KERNE' union select * from t1 where felt = 'BASIS' union select * from t1 where felt = 'NY' union select * from t1 where felt = 'STAND BY' union select * from t1 where felt = 'What ever'
Men det er nu ikke pænt at lave en database på den måde, du burde nok lave nogen fremmenøgler til en styrings tabel i stedet.
Den der kan få denne SQL fætter til at spille med ORDER BY TOP, KERNE osv får pointene.
string SQL = "SELECT a.ID, a.navn, a.byen, a.status, a.koen, a.mobil FROM ANSAT AS a, haarfarve as hf WHERE hf.ansat_id = a.ID " + where + " AND a.godkendt = true";
Mine 2 løsninger kan ikke klares med blot en SQL-sætning, da det kræver at du opretter et felt eller en ny tabel. Derefter er resten beskrevet i mine 2 indlæg.
Hvis du vælger Skwat's løsning (som jeg ikke ved om virker) så skal du altså skrive din egen SQL-sætning 5 gange med UNION mellem og med forskellig kriterier for TOP, KERNE osv.
Det kan man ikke....Skwat'a forslag kommer tættest på, men Access vil automatisk sortere det efter alm. rækkefølge, når du bruger UNION. Derfor virker Skwat's forslag ikke som det står her.
Men hvis man udvidede den lidt: select *, 1 as Rækkefølge from t1 where felt = 'TOP' union select *, 2 as Rækkefølge from t1 where felt = 'KERNE' union select *, 3 as Rækkefølge from t1 where felt = 'BASIS' union select *, 4 as Rækkefølge from t1 where felt = 'NY' union select *, 5 as Rækkefølge from t1 where felt = 'STAND BY' ORDER BY Rækkefølge
"SELECT a.ID, a.navn, a.byen, a.status, a.koen, a.mobil, 1 as Rækkefølge FROM ANSAT AS a, haarfarve as hf WHERE hf.ansat_id = a.ID " & where & " AND a.godkendt = true And Status = 'TOP' UNION SELECT a.ID, a.navn, a.byen, a.status, a.koen, a.mobil, 2 as Rækkefølge FROM ANSAT AS a, haarfarve as hf WHERE hf.ansat_id = a.ID " & where & " AND a.godkendt = true And Status = 'KERNE' UNION SELECT a.ID, a.navn, a.byen, a.status, a.koen, a.mobil, 3 as Rækkefølge FROM ANSAT AS a, haarfarve as hf WHERE hf.ansat_id = a.ID " & where & " AND a.godkendt = true And Status = 'BASIS' UNION SELECT a.ID, a.navn, a.byen, a.status, a.koen, a.mobil, 4 as Rækkefølge FROM ANSAT AS a, haarfarve as hf WHERE hf.ansat_id = a.ID " & where & " AND a.godkendt = true And Status = 'NY' UNION SELECT a.ID, a.navn, a.byen, a.status, a.koen, a.mobil, 5 as Rækkefølge FROM ANSAT AS a, haarfarve as hf WHERE hf.ansat_id = a.ID " & where & " AND a.godkendt = true And Status = 'STAND BY' ORDER BY Rækkefølge"
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.