0

私は、マイルマーカーでソートされた、選択された州間高速道路の検出器データを出力することになっている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 の 1 つを除いてすべて正常に機能しています。このオプションを選択すると、リストは緯度または経度ではなく、テーブル内の順序で並べ替えられます。/が入っているのはI-55/70だけです。これは物事に影響を与えますか?

前もって感謝します。

編集: これらは、上記の例と同じスタイルで「I-55/70 WB」などとしてリスト項目にリストされます。混乱して申し訳ありません。

Edit2:それはうまくいきました。ありがとう!

4

2 に答える 2

3

I-55/70'%EB%'%WB%''%NB%'またはのいずれにも対応しません'%SB%'

あなたのORDER BY句は常にNULLその場合です。

WebNameがの場合、どのフィールドで並べ替えますI-55/70か?

于 2009-02-09T16:09:44.657 に答える
1

「CASE @WebName WHEN '%EB%'」などはtrueと評価されるべきではないため、ORDER BY句はどのような場合でも機能しないようです。使用している 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

スラッシュは何にも影響を与えるべきではありません。

于 2009-02-09T16:21:49.607 に答える