SQL dans ASP.NET - Ordre de tri par un seul type mal
-
22-08-2019 - |
Question
Je travaille sur une application ASP.NET qui est censé données du détecteur de sortie pour une inter-choisie, triées par marqueur de mile. Nous avons déterminé la meilleure façon de le faire serait le tri par la longitude (Ouest et Est) ou latitude (Nord et Sud) en fonction de quelle direction il va. Voici la requête qui le remplit.
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 NomSite a des annonces 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érentes autoroutes, et il fonctionne très bien pour tout sauf un, I-55/70. Lorsque cette option est choisie, la liste ne sont pas triées par la latitude ou la longitude, mais simplement par l'ordre qu'ils sont dans le tableau. I-55/70 est le seul avec / en elle. Est-ce que cela affecte les choses?
Je vous remercie à l'avance.
Edit: Ce sont répertoriés dans l'élément de liste comme « I-55/70 WB » et ainsi de suite dans le même style que l'exemple ci-dessus. Désolé de la confusion.
Edit2: Cela a fait l'affaire. Merci!
La solution
Il me semble que votre clause ORDER BY ne devrait pas travailler dans tous les cas parce que « @WebName CASE QUAND « % EB% » », etc. ne doit pas être évaluée à true. La déclaration de cas que vous utilisez ne une comparaison d'équivalence, mais les opérateurs génériques ( « % ») ne sont utilisés que pour LIKE. Essayez ceci:
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 ne devrait pas affecter quoi que ce soit.
Autres conseils
I-55/70
correspond à aucun des '%EB%
, '%WB%'
, '%NB%'
ou '%SB%'
.
Votre clause ORDER BY
est toujours NULL
dans ce cas.
Dans quel domaine voulez-vous trier lorsque le WebName
est I-55/70
?