SQL in ASP.NET - Ordinato per l'ordinamento solo tipo in modo non corretto
-
22-08-2019 - |
Domanda
Sto lavorando a un'applicazione ASP.NET che si suppone che i dati del rivelatore di uscita per un interstatale scelta, ordinati per miglio marcatore. Abbiamo determinato il modo migliore per farlo sarebbe smistamento da longitudine (Est e Ovest) o di latitudine (Nord e Sud), a seconda della direzione in cui va. Ecco la domanda che lo popola.
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 WebName ha elenchi diversi, come 'I-64 WB a MP 3.1'. I ListItems cui hanno accesso sono elencati come 'I-64'.
Ci sono 4 autostrade diverse, e sta lavorando bene per tutto, ma uno, I-55/70. Quando questa opzione è selezionata, l'elenco non è ordinato per la latitudine o longitudine, ma invece semplicemente l'ordine che sono nella tabella. I-55/70 è l'unico con un / a esso. Sarebbe questo influenzerà le cose?
Grazie in anticipo.
Modifica: Questi sono elencati nella voce lista come 'I-55/70 WB' e così via nello stesso stile, come nell'esempio precedente. Ci scusiamo per la confusione.
Edit2: Che ha fatto il trucco. Grazie!
Soluzione
Mi sembra il tuo clausola ORDER BY non dovrebbe funzionare in tutti i casi, perché "CASO QUANDO @WebName '% EB%'", ecc, non dovrebbe valutare a true. La dichiarazione caso, come si utilizza lo fa un confronto di equivalenza, ma gli operatori jolly ( "%") sono utilizzati solo per LIKE. Prova a modificare:
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 non dovrebbe pregiudicare nulla.
Altri suggerimenti
I-55/70
corrisponde a nessuno dei '%EB%
, '%WB%'
, '%NB%'
o '%SB%'
.
Il tuo clausola ORDER BY
è sempre NULL
in quel caso.
Cosa campo vuoi ordinare quando il WebName
è I-55/70
?