SQL в ASP.NET - порядок сортировки только одного типа неправильно - PullRequest
0 голосов
/ 09 февраля 2009

Я работаю над приложением 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. Когда выбран этот параметр, список сортируется не по широте или долготе, а по порядку их расположения в таблице. I-55/70 - единственный, у кого есть /. Повлияет ли это на вещи?

Заранее спасибо.

Редактировать: они перечислены в элементе списка как «I-55/70 WB» и т. Д. В том же стиле, что и в примере выше. Извините за путаницу.

Edit2: Это добилось цели. Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 февраля 2009

I-55/70 не соответствует ни '%EB%, '%WB%', '%NB%', ни '%SB%'.

В этом случае ваше ORDER BY предложение всегда равно NULL.

Какое поле вы хотите отсортировать, когда WebName равно I-55/70?

1 голос
/ 09 февраля 2009

Мне кажется, что ваше предложение 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

Косая черта не должна ни на что влиять.

...