Avatar billede hrc Mester
09. maj 2017 - 14:15 Der er 3 kommentarer og
1 løsning

Select med parameterstyret sortering og retning

Fra og med version 2008 kan man lave scripts som dette:

declare @column int = 1

select b.cpr
      ,b.fornavn
      ,b.efternavn
      ,p.postnr
      ,p.postby
from dbo.borger b
left join dbo.post p on (p.ref = b.post_ref)
order by
  case @column
    when  1 then b.cpr
    when  2 then b.fornavn
    when  3 then b.efternavn
    when  4 then p.postnr
    when  5 then p.postby
  end

Det er smart hvis man skal ændre sorteringsorden i en liste. Man slipper for at skrive scriptet om og får (vistnok) ikke genereret en ny execution plan hver gang.

... men der er et problem. Tager vi listen og eksempelvis klikker 2 gange på en titel, så skal sorteringsordenen bibeholdes, men retningen ændres til desc. Nogen der har en god løsning til det?

Tilsyneladende kan desc ikke stå i en case
Avatar billede arne_v Ekspert
09. maj 2017 - 14:44 #1
Korrekt. CASE er for vaerdier aka felter, konstanter og kombinationer.
Avatar billede arne_v Ekspert
09. maj 2017 - 14:46 #2
Har du proevet noget a la:

order by
  case @column
    when  1 then b.cpr
    when  2 then b.fornavn
    when  3 then b.efternavn
    when  4 then p.postnr
    when  5 then p.postby
    else 0
  end
  asc,
  case @column
    when  -1 then b.cpr
    when  -2 then b.fornavn
    when  -3 then b.efternavn
    when  -4 then p.postnr
    when  -5 then p.postby
    else 0
  end
  desc
Avatar billede arne_v Ekspert
09. maj 2017 - 14:46 #3
Ideen er at en sortering paa konstanten 0 ikke betyder noget.
Avatar billede hrc Mester
09. maj 2017 - 15:43 #4
Hej Arne. Selvom jeg er degraderet til praktikant, så har jeg dog haft lidt aktivitet på eksperten. Når du svarede så var det altid kvalificeret - også her.

Jeg fangede den med 0'eren (eller NULL) med det samme. Tror det er den bedste løsning, selvom jeg undrer mig over, at dengang de udvidede syntaksen m. en case i order by, så udtænkte de kun en halv løsning.
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

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