2016-10-14 2 views
2

次の列を持つテーブルtがあるとします。Code int、Name nvarchar(50)。等しいか小さいかを選択するSQLクエリ

与えられたコードcに最も一致する行をテーブルに照会したいと思います。 (重要度の順に)「最も一致する」基準:

  • 1)そのコード
  • 2 C一致)コードCを超える(しかし、1つの非常に最初のものである)の行を選択する行を選択します。たとえば、c = 4でt に1,2,3,5,6,7が含まれている場合は、5を選択します。 コードがc未満の行を選択します。 C = 4とtは3,2、及び 1を含む場合、例えば、私は、コードは、ストアドプロシージャであることを行っている3

を選択したいです。

誰かが上記を達成する方法を提案してもらえますか?

ありがとうございました。

サンプルデータと予想される結果:

1, "Name1" 
2, "Name2" 
4, "Name4" 
5, "Name5" 

If c=2, result: 2,"Name2" 
If c=3, result: 4,"Name4" 
if c=6, result: 5,"Name5" 
+0

いくつかのサンプルデータと予想される結果を投稿してください。 –

+1

入力テーブルと出力結果セットでまだ明確ではありません。あなたはそれを提供してもらえますか? –

答えて

1

Iは、2つの基準で行を注文したい - 対象番号からの絶対距離と、それより大きいか小さいのかどうか、及びだけ一番上の行を選びます。例えば、ターゲットコードが4であると仮定した場合:

SELECT TOP 1 * 
FROM  t 
ORDER BY ABS(code - 4) ASC, CASE WHEN code > 4 THEN 1 ELSE 0 END DESC 
1

これはトップ1クエリです。 1つのベストマッチングレコードが必要です。したがって、ORDER BYで希望の順序に沿ってTOP 1を選択してください。

関連する問題