AddeladdeMedlem sedan jan. 20012 997 inlägg
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
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
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
Och du använder Access som DBMS?
AddeladdeMedlem sedan jan. 20012 997 inlägg
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
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
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
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
LarsGMedlem sedan dec. 200012 465 inlägg
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
AddeladdeMedlem sedan jan. 20012 997 inlägg
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
Om man räknar så borde det bli
order by 8,9
AddeladdeMedlem sedan jan. 20012 997 inlägg
Nu förstår jag hur man räknar