webForumDet fria alternativet

Komplicerad Order By Case

4 svar · 242 visningar · startad av erka

erkaMedlem sedan dec. 19996 522 inlägg
#1

Hej

Jag har idag en sqlfråga som ser ut på följande sätt

SELECT Pk_MenuItemId, Fk_MenuId, NavigateUrl, NavigateText, ParentMenuItemId FROM  PageMenuItems 
WHERE Fk_MenuId = @menuId 
Order by case when ParentMenuItemId = 0 then Pk_MenuItemId 
Else ParentMenuItemId end,ParentMenuItemId

@menuId innehåller en integer som skickas in. Som det är nu sorteras menyerna så att om en meny har något ParentMenuItemId kommer den ut efter den menyn med idt som står i ParentMenuItemId. Går det via sql få så att den sortera på bokstavsordning, alltså att den först sorterar alla menyer med ParentMenuItemId = 0 i bokstavsordning och sedan undermenyerna under respektive meny med idt i ParentMenuItemId.

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Om jag nu har förstått rätt

SELECT Pk_MenuItemId, Fk_MenuId, NavigateUrl, NavigateText, ParentMenuItemId ,
case when parentMenuId = 0 then <nameOfMenuItem>
else (select <nameOfMenuItem> from PageMenuItems
where Fk_MenuId = @menuId 
  and Pk_MenuItemId = pm.parentMenuItemId) as n
FROM  PageMenuItems pm
WHERE Fk_MenuId = @menuId 
Order by n,ParentMenuItemId

principiellt (ur SQL-synpunkt) så går det att stoppa in den case som nu ligger i select-listan direkt i order by men jag har för mig att sql server inte blir så förtjust då.

erkaMedlem sedan dec. 19996 522 inlägg
#3

Tack, får dock incorrect syntax near the keyword 'AS'. Vad jag vill göra är att hämta alla där ParentMenuItemId = 0 (med ett visst Fk_MenuId) efter bokstavsordning, direkt under varje med ParentMenuItemId = 0 ska det komma de som har samma ParentMenuItemId som "den jag är pås Pk_MenuItemId.

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Glömde ett end efter case

case when parentMenuId = 0 then <nameOfMenuItem>
else (select <nameOfMenuItem> from PageMenuItems
where Fk_MenuId = @menuId 
  and Pk_MenuItemId = pm.parentMenuItemId) end as n
erkaMedlem sedan dec. 19996 522 inlägg
#5

Det fungerade, tror jag hajjar hur det fungerar nu också, stort tack LarsG, ännu en gång :) Trevlig fortsättning på kvällen

126 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)