Pergunta

Eu estou trabalhando em um aplicativo ASP.NET que é suposto dados detector de saída para um escolhido interestadual, classificado por milhas marcador. Nós determinamos a melhor maneira de fazer isso seria classificando-o por longitude (Oeste e Leste) ou latitude (Norte e Sul), dependendo de qual direção ele vai. Aqui está a consulta que o preenche.

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

A visão WebName tem diferentes listagens, tais como 'I-64 WB pelo MP 3.1'. Os ListItems que têm acesso são listados apenas como 'I-64'.

Há 4 interestaduais diferentes, e está funcionando bem para tudo, mas um, I-55/70. Quando essa opção for escolhida, a lista não é ordenada pela latitude ou longitude, mas em vez disso apenas pela ordem que eles estão na tabela. I-55/70 é o único com um / nele. Isso afetaria as coisas?

Agradecemos antecipadamente.

Edit: Eles estão listados no item da lista como 'I-55/70 WB' e assim por diante no mesmo estilo como o exemplo acima. Desculpe a confusão.

Edit2: Isso fez o truque. Obrigado!

Foi útil?

Solução

Parece-me a sua cláusula ORDER BY não devem trabalhar em nenhum caso, porque "CASE @WebName QUANDO '% EB%'" etc. não deve avaliar a verdade. A declaração caso, como você está usando ele faz uma comparação equivalência mas os operadores curinga ( "%") são utilizados apenas para LIKE. Tente isto em vez disso:

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

A barra não deve afetar nada.

Outras dicas

I-55/70 corresponde a nenhum dos '%EB%, '%WB%', '%NB%' ou '%SB%'.

A sua cláusula ORDER BY é sempre NULL nesse caso.

O campo que você deseja classificar quando o WebName é I-55/70?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top