SQL en ASP.NET - ordenar antes de ordenar un solo tipo de forma incorrecta
-
22-08-2019 - |
Pregunta
Estoy trabajando en una aplicación ASP.NET que se supone que los datos del detector de salida de un estado a otro elegido, ordenado por la milla. Determinamos la mejor manera de hacer esto sería clasificarlos por longitud (occidental y oriental) o la latitud (Norte y Sur) dependiendo de la dirección que va. Aquí está la consulta que lo llena.
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 vista NombreWeb tiene diferentes listados como 'I-64 WB en MP 3.1'. Los ListItems los que tienen acceso se enumeran simplemente como 'I-64'.
Hay 4 diferentes carreteras interestatales, y está funcionando muy bien para todo, menos uno, I-55/70. Cuando se elige esta opción, la lista no está ordenada por la latitud o longitud, pero en su lugar sólo por el orden en que están en la mesa. I-55/70 es el único con un / en ella. Afectaría esto a las cosas?
Gracias de antemano.
Edit: Estos se muestran en el elemento de la lista como 'I-55/70 WB' y así sucesivamente en el mismo estilo que el ejemplo anterior. Lo sentimos acerca de la confusión.
Edit2: Que hizo el truco. Gracias!
Solución
Me parece que su cláusula ORDER BY no debe trabajar en todos los casos porque "CASO CUANDO @WebName '% EB%'", etc., no debe evaluar como true. La declaración del caso y cuando se utilice lo hace una comparación de equivalencia pero los comodines ( "%") sólo se utilizan para similares. Tal vez puedas probar:
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 barra no debe afectar a nada.
Otros consejos
I-55/70
corresponde a ninguno de '%EB%
, '%WB%'
, '%NB%'
o '%SB%'
.
Su cláusula ORDER BY
siempre NULL
en ese caso.
¿Qué haces campo que desea ordenar cuando el WebName
es I-55/70
?