SQL в ASP.NET – порядок Неправильная сортировка только одного типа

StackOverflow https://stackoverflow.com/questions/528767

Вопрос

Я работаю над приложением 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?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top