SQL в ASP.NET – порядок Неправильная сортировка только одного типа
-
22-08-2019 - |
Вопрос
Я работаю над приложением ASP.NET, которое должно выводить данные детектора для выбранной межштатной автомагистрали, отсортированные по отметке мили.Мы определили, что лучший способ сделать это — отсортировать его по долготе (запад и восток) или широте (север и юг) в зависимости от направления.Вот запрос, который его заполняет.
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
В представлении WebName есть разные списки, например «I-64 WB at MP 3.1».ListItems, к которым у них есть доступ, указаны как «I-64».
Есть 4 разных межштатных автомагистрали, и все работает нормально, кроме одной, I-55/70.Когда выбран этот параметр, список сортируется не по широте или долготе, а только по порядку их расположения в таблице.И-55/70 единственный, у которого есть а/в.Повлияет ли это на ситуацию?
Заранее спасибо.
Редактировать:Они указаны в списке как «I-55/70 WB» и т. д. в том же стиле, что и в примере выше.Извините за путаницу.
Редактировать2:Это помогло.Спасибо!
Решение
Мне кажется, что ваше предложение ORDER BY не должно работать ни в коем случае, потому что «CASE @WebName WHEN '%EB%'» и т. д.не должно оцениваться как true.Оператор case в том виде, в котором вы его используете, выполняет сравнение эквивалентности, но подстановочные операторы («%») используются только для LIKE.Вместо этого попробуйте это:
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
Слэш ни на что не должен влиять.
Другие советы
I-55/70
не соответствует ни одному из '%EB%
, '%WB%'
, '%NB%'
или '%SB%'
.
Твой ORDER BY
пункт всегда NULL
в таком случае.
По какому полю вы хотите выполнить сортировку, когда WebName
является I-55/70
?