2009-02-09 14 views
0

Je travaille sur une application ASP.NET qui est censée produire des données de détecteur pour un interstate choisi, trié par marqueur de mile. Nous avons déterminé que la meilleure façon de le faire serait de le trier selon la longitude (Ouest et Est) ou la latitude (Nord et Sud) selon la direction dans laquelle il se dirige. Voici la requête qui le remplit.SQL dans ASP.NET - Ordre En ne triant qu'un seul type incorrectement

SELECT [ShortWebID], [AvgSpeed], [update_time], [WebName] FROM [vwAverageSpeed] 

WHERE (([WebName] LIKE '%' + @WebName + '%') AND ([update_time] > @update_time)) 

ORDER BY CASE @WebName WHEN '%EB%'THEN [Longitude] WHEN '%WB%' THEN [Longitude] WHEN '%NB%' THEN [Latitude] WHEN '%SB%' THEN [Latitude] END 

La vue WebName a différentes listes telles que 'I-64 WB à MP 3.1'. Les ListItems auxquels ils ont accès sont répertoriés comme 'I-64'.

Il y a 4 différents états, et il fonctionne bien pour tout sauf un, I-55/70. Lorsque cette option est choisie, la liste n'est pas triée par la latitude ou la longitude, mais plutôt par l'ordre dans lequel ils se trouvent dans la table. I-55/70 est le seul avec un/dedans. Cela affecterait-il les choses?

Merci d'avance. Editer: Ceux-ci sont listés dans la liste comme 'I-55/70 WB' et ainsi de suite dans le même style que l'exemple ci-dessus. Désolé pour la confusion.

Edit2: Cela a fait l'affaire. Merci!

Répondre

1

Il me semble que votre clause ORDER BY ne devrait pas fonctionner dans tous les cas parce que "CASE @WebName WHEN '% EB%'" etc. ne devrait pas être vrai. L'instruction case comme vous l'utilisez effectue une comparaison d'équivalence, mais les opérateurs génériques ("%") sont utilisés uniquement pour LIKE. Essayez ceci à la place:

ORDER BY CASE 
WHEN @WebName LIKE '%EB%' THEN [Longitude] 
WHEN @WebName LIKE '%WB%' THEN [Longitude] 
WHEN @WebName LIKE '%NB%' THEN [Latitude] 
WHEN @WebName LIKE '%SB%' THEN [Latitude] 
END 

La barre oblique ne devrait rien affecter.

3

I-55/70 correspond à aucun des '%EB%, '%WB%', '%NB%' ou '%SB%'. Votre clause ORDER BY est toujours NULL dans ce cas.

Sur quel champ voulez-vous trier lorsque le WebName est I-55/70?