Avatar billede nielslbeck Nybegynder
06. juli 2006 - 14:51 Der er 5 kommentarer og
1 løsning

Hjælp til SQL-sætning

Jeg har en tabel, der kunne se ud som følger (rækkenr er ikke en del af tabellen, men benyttes blot som forklaring senere):

rækkenr type  prioritet  værdi
      1    1          1      x
      2    2          1      y
      3    3          1      z
      4    4          2      w
      5    1          2      q

Jeg vil nu gerne vælge en værdi for hver eneste type (altså en værdi for type = 1/2/3/4). Hvis der findes en type/værdi som har prioritet 1, vil den være at foretrække fremfor én med prioritet 2. Jeg vil altså gerne have valgt række 1, 2, 3 og 4, da jeg her har én af hver type, og de har alle prioritet 1 (med undtagelse af række 4 som har typen 4, som ikke findes med prioritet 1). Række 5 vælges ikke, da række 1 i stedet er valgt, da denne også har type 1 men prioritet 1.

Jeg vil med andre ord gerne have følgende output fra min forespørgsel:

type  prioritet  værdi
  1          1      x
  2          1      y
  3          1      z
  4          2      w

Nogen der har en løsning på det problem?
Avatar billede teepee Nybegynder
06. juli 2006 - 15:00 #1
Kan der være mere end en række med samme type og prioritet?
Avatar billede arne_v Ekspert
06. juli 2006 - 15:02 #2
proev:

SELECT type,prioritet,vaerdi
FROM tabel t1
WHERE prioritet = (SELECT MIN(prioritet) FROM tabel t2 WHERE t2.type=t1.type)
Avatar billede nielslbeck Nybegynder
06. juli 2006 - 15:31 #3
Nej, der kan ikke være mere end en række med samme type og prioritet.

Super, Arne! Det virker - hvis tabellen er nøjagtig som beskrevet ovenfor. Eksemplet ovenfor er naturligvis blot en simpel udgave af det virkelige problem, men skulle nok selv kunne klare de fleste joins.
Men prioriteten betyder ikke altid, at en mindre prioritet er at foretrække. Så jeg vil gerne kunne sige i hvert enkelt tilfælde, at nu er 1 bedre end 2, nu er 12 bedre end 4 osv - og så virker MIN(prioritet) ikke helt :-(
Avatar billede arne_v Ekspert
06. juli 2006 - 15:44 #4
lav en ekstra tabel med:

prioritet
orderedprioritet

og join med den og sorter efter orderedprioritet

(du kan ogsaa lave en moeggrim CASE WHEN i din SQL, men ...)
Avatar billede nielslbeck Nybegynder
07. juli 2006 - 08:19 #5
Jeg har en tabel der ser nogenlunde således ud:

prioritet  mindstBetydende
        1                0
        2                1
        3                0
        4                0

Hvis jeg ønsker at finde alt med prioritet 1, vil jeg samtidig gerne finde alt med prioritet 2, hvor det med prioritet 1 "overskygger" det med prioritet 2 - altså får man værdien fra prioritet 1, hvis begge har samme værdi. Det var sådan set mit første eksempel.

Et andet eksempel er, hvis jeg ønsker at finde alt med prioritet 2, vil jeg få følgende svar:

type  prioritet  værdi
  4          2      w
  1          2      q

Dette skyldes, at prioritet 2 er den mindst betydende - og vi skal derfor ikke hente andre værdier ud, end dem der står ved prioritet 2.

Kan jeg på en eller anden måde joine med min tabel hvor prioriteterne er beskrevet?
Avatar billede nielslbeck Nybegynder
31. juli 2006 - 09:48 #6
Problemet er nu løst - omend det ikke skete på nogen specielt elegant måde :-S
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
Computerworld tilbyder specialiserede kurser i database-management

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