0

SQL Server の ABS 関数と Round 関数は知っていますが、私の問題は少し異なり、これらを使用して目的の結果を得る方法がわかりません。

番号があるとします: 8000

そして、この数字のリストを返すクエリがあります: 0、5000、10000、15000

このリストでABS関数を使用すると、たとえば

DECLARE @target as INT
SET @target = 8000
SELECT TOP(1) @result AS Number
FROM dbo.Numbers
ORDER BY ABS(Number - @target)

私は10000を得る

期待されるもの

しかし、どうすればこれを5000に戻すことができますか?つまり、結果は常に切り捨てられますか?

4

2 に答える 2

1

質問を理解して、上に行かずに最も近い一致が必要であることを意味します。

を追加しWHERE Number <= @targetます。

于 2012-09-27T00:54:11.393 に答える
1

これを試して:

...
WHERE Number <= @target
ORDER BY Number DESC

ORDER BY Number DESC@target ( ) を超えない最初の数値 ( ) を取得するだけですWHERE Number <= @target

これを失うことの良い点ABSORDER BY、DBMS が (存在する場合) のインデックスを利用できるようになったことNumberです。

于 2012-09-27T00:58:58.003 に答える