webForumDet fria alternativet

Select i order by

13 svar · 403 visningar · startad av Addeladde

AddeladdeMedlem sedan jan. 20012 997 inlägg
#1

Hej

Jag vill i en sql sats sortera på ett visst sätt om en speciell parameter är satt i en rad i databasen.

...order by (Select menuSortype from menu Where menuID = 5)

fältet menu sorting returnerar dock bara 1 eller 0. Om der är ett så ska det sorteras efter m.menuTitle annars efter m.menuSorting'

Kanske något liknande detta?

"ORDER BY IIf(((Select menuSortType from menu Where menuID = "& ID &") = 0), 'm.menuTitle', 'm.menuSorting')"

Förstår ni?

LarsGMedlem sedan dec. 200012 465 inlägg
#2

Jag förmodar att menutitle och menunumber har olika datatyp.

select ... 
case when (select  menuSorting 
from menu 
Where menuID = 5) = 0 then menuNumber end as mn,
case when (select  menuSorting 
from menu 
Where menuID = 5) = 1 then menuTitle end as mt
from t
order by mn,mt
AddeladdeMedlem sedan jan. 20012 997 inlägg
#3

Han ändra lite i min kod innan du svarade.
Nu ser min kod ut på följande sätt men jag går odefinerat fel.

sqlString = "SELECT m.menuID, m.menuTitle, m.menuSorting, m.menuPublishStart, m.menuPublishEnd, m.menuShow " &_ 
  "FROM menu as m " &_
  "WHERE m.menuParentID = "& ID &" "&_
  "AND menuShow = 1 "&_
  "AND ((menuTimePublish = 1 " &_
  "AND m.menuPublishStart <= #"& now() &"# " &_
  "AND m.menuPublishEnd >= #"& now() &"# )" &_
  "Or menuTimepublish = 0) " &_
  "Case When (Select  menuSortType from menu Where menuID = "& ID &") = 0 Then m.menuNumber End As mn, " &_
  "Case When (Select  menuSortType from menu Where menuID = "& ID &") = 1 Then m.menuTitle End As mt " &_
  "from t " &_
  "order by mn,mt"
LarsGMedlem sedan dec. 200012 465 inlägg
#4

Och du använder Access som DBMS?

AddeladdeMedlem sedan jan. 20012 997 inlägg
#5

Japp

Kanske något liknande detta:

  "Order By Case When (Select  m2.menuSortType from menu as m2 Where m2.menuID = "& ID &") = 0 Then m.menuNumber Else " &_
  "m.menuTitle End "
LarsGMedlem sedan dec. 200012 465 inlägg
#6

Case fungerar inte i Access och jag är ytterst tveksam till att den stöder subselect i order by

select ... 
iif((select  menuSorting 
from menu 
Where menuID = 5)=0,menuNumber,null),
iif((select  menuSorting 
from menu 
Where menuID = 5) = 1,menuTitle,null)
from t
order by 9,10

där 9 och 10 motsvarar de ordningsnummer som varje iif-uttryck har inom select-listan.

AddeladdeMedlem sedan jan. 20012 997 inlägg
#7

Jag är helt lost måste jag säga.

sqlString = "SELECT m.menuID, m.menuTitle, m.menuSorting, m.menuPublishStart, m.menuPublishEnd, m.menuShow " &_ 
  "FROM menu as m " &_
  "WHERE m.menuParentID = "& ID &" "&_
  "AND menuShow = 1 "&_
  "AND ((menuTimePublish = 1 " &_
  "AND m.menuPublishStart <= #"& now() &"# " &_
  "AND m.menuPublishEnd >= #"& now() &"# )" &_
  "Or menuTimepublish = 0) " &_
  "iif((select menuSortType from menu Where menuID = "& ID &") = 0,m.menuSorting,null), " &_ 
  "iif((select menuSortType from menu Where menuID = "& ID &") = 1,m.menuTitle,null) " &_
  "from t " &_
  "order by 9,10"
LarsGMedlem sedan dec. 200012 465 inlägg
#8

Nej, du måste lägga iif-uttrycken i select-listan och då skulle dom få ordningsnummer 7 och 8

AddeladdeMedlem sedan jan. 20012 997 inlägg
#9

Hur menar du då?

LarsGMedlem sedan dec. 200012 465 inlägg
#10
sqlString = "SELECT m.menuID, m.menuTitle, m.menuSorting, m.menuPublishStart, m.menuPublishEnd, m.menuShow, " &_ 
  "iif((select menuSortType from menu Where menuID = "& ID &") = 0,m.menuSorting,null), " &_ 
  "iif((select menuSortType from menu Where menuID = "& ID &") = 1,m.menuTitle,null) " &_
  "FROM menu as m " &_
  "WHERE m.menuParentID = "& ID &" "&_
  "AND menuShow = 1 "&_
  "AND ((menuTimePublish = 1 " &_
  "AND m.menuPublishStart <= #"& now() &"# " &_
  "AND m.menuPublishEnd >= #"& now() &"# )" &_
  "Or menuTimepublish = 0) " &_
  "order by 7,8"

Jag är osäker huruvida man kan ange null på det sätt som jag gjort i Access. Om du får fel så

sqlString = "SELECT m.menuID, m.menuTitle, m.menuSorting, m.menuPublishStart, m.menuPublishEnd, m.menuShow, " &_ 
  "iif((select menuSortType from menu Where menuID = "& ID &") = 0,m.menuSorting,0), " &_ 
  "iif((select menuSortType from menu Where menuID = "& ID &") = 1,m.menuTitle,'') " &_
  "FROM menu as m " &_
  "WHERE m.menuParentID = "& ID &" "&_
  "AND menuShow = 1 "&_
  "AND ((menuTimePublish = 1 " &_
  "AND m.menuPublishStart <= #"& now() &"# " &_
  "AND m.menuPublishEnd >= #"& now() &"# )" &_
  "Or menuTimepublish = 0) " &_
  "order by 7,8"

underförutsättning att menusorting är numeriskt och menutitle är character.

AddeladdeMedlem sedan jan. 20012 997 inlägg
#11

Tack!

AddeladdeMedlem sedan jan. 20012 997 inlägg
#12

Nu har jag upptäckt att det tyvär inte sorterar varken efter menuTitle eller menuSorting.

sqlString = "SELECT m.menuID, m.menuTitle, m.menuLink, m.menuSorting, m.menuPublishStart, m.menuPublishEnd, m.menuShow, " &_ 
  "iif((select menuSortType from menu Where menuID = "& ID &") = 1,m.menuSorting,null), " &_ 
  "iif((select menuSortType from menu Where menuID = "& ID &") = 0,m.menuTitle,null) " &_
  "FROM menu as m " &_
  "WHERE m.menuParentID = "& ID &" "&_
  "AND menuShow = 1 "&_
  "AND ((menuTimePublish = 1 " &_
  "AND m.menuPublishStart <= #"& now() &"# " &_
  "AND m.menuPublishEnd >= #"& now() &"# )" &_
  "Or menuTimepublish = 0) " &_
  "order by 7,8"
LarsGMedlem sedan dec. 200012 465 inlägg
#13

Om man räknar så borde det bli

order by 8,9
AddeladdeMedlem sedan jan. 20012 997 inlägg
#14

Nu förstår jag hur man räknar

360 ms totalt · 5 externa anrop · cache AV · v20260730165559-full.0b955084
0 ms — hämta statistik (cache)
118 ms — slå upp tråd (db)
0 ms — hämta forumlista (cache)
121 ms — hämta inlägg (db)
118 ms — hämta bilagor (db)