webForumDet fria alternativet
Logga in / Bli medlem

Komplicerad Order By Case

Databaser & SQL

4 svar · 242 visningar · startad av erka

Medlem sedan dec. 19996 522 inlägg
Trådstart#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.

Medlem 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å.

Medlem 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.

Medlem 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
Medlem 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

263 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)