Avatar billede alpapa Nybegynder
25. november 2003 - 23:19 Der 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?

1. TOP
2. KERNE
3. BASIS
4. NY
5. STAND BY

alpapa
25. november 2003 - 23:22 #1
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.
25. november 2003 - 23:25 #2
Alternativt kunne du lave en ny tabel, som indeholder 2 kolonner: dit oprindelige felt fra den anden tabel (den med TOP og KERNE) samt rækkefølge.

I din forespørgsel kan du så joine denne nye tabel på og derved sortere på det nye rækkefølge-felt.

Fordelen ved den sidste model er, at du kun behøver at have de 5 poster i denne tabel.

Begge løsninger duer på SQL serveren...
Avatar billede skwat Praktikant
25. november 2003 - 23:26 #3
jeg ville klare det med union selects

ie

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.
Avatar billede alpapa Nybegynder
25. november 2003 - 23:44 #4
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";

alpapa
Avatar billede skwat Praktikant
25. november 2003 - 23:46 #5
ejj du, man må gerne selv tænke bare lidt, du har fået tre løsninger som alle virker!
25. november 2003 - 23:54 #6
Jeg er enig med Skwat.

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.
Avatar billede alpapa Nybegynder
25. november 2003 - 23:54 #7
skwat -> fair nok, hvis du synes det er for arbejde for 60 point.
25. november 2003 - 23:58 #8
Vi har jo ikke oplysninger nok; vi aner ikke hvad din "+ where +" indeholder (og hvorfor bruger du + i stedet for & ?)

Endvidere ved vi slet ikke hvad dit felt hedder (det med TOP og KERNE osv)
Avatar billede alpapa Nybegynder
25. november 2003 - 23:58 #9
thomasjepsen -> Din løsning er ok, men mit spørgsmål gik på om man kunne lave en ORDER BY som sorterede efter en forudbestemt rækkefølge.

alpapa
Avatar billede alpapa Nybegynder
26. november 2003 - 00:03 #10
WHERE kan du bare udskifte med WHERE ID > 0, jeg bruger " + where + " fordi mine søgekriterier dynamiske.

Kolonnen hedder status
26. november 2003 - 00:04 #11
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

Så burde det vist kunne lade sig gøre....?
26. november 2003 - 00:06 #12
"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"
Avatar billede alpapa Nybegynder
26. november 2003 - 00:13 #13
Det spiller, takker for hjælpen -> thomasjepsen
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