這是一個示例表
| ID | 從 | 至 | 最大限度 |
|---|---|---|---|
| 100001 | 100.00 | 199.99 | 5 |
| 100002 | 200.00 | 299.99 | 4 |
| 100003 | 300.00 | 399.99 | 3 |
| 100004 | 400.00 | 499.99 | 2 |
這個 SQL 作業得很好。結果是行 ID 為 10001 的行。
DECLARE @VAL DECIMAL(6,2);
SET @VAL = 159.97
SELECT ID, FROM, TO, MAX
FROM [MyTable].[dbo].[MagicPlan]
WHERE @VAL BETWEEN FROM AND TO;
但是,我不知道如何默認為@VAL 超出范圍的最后一行。就目前而言,將 @VAL 更改為 695.43 不會回傳任何行。我希望它回傳行 ID 10004。這有意義嗎?
uj5u.com熱心網友回復:
使用TOP 1并首先按您想要的標準排序,然后按您的次要標準排序
DECLARE @VAL decimal(6,2) = 159.97;
SELECT TOP 1 ID, [FROM], [TO], [MAX]
FROM [MyTable].[dbo].[MagicPlan]
ORDER BY
CASE WHEN @VAL BETWEEN [FROM] AND [TO] THEN 1 ELSE 0 END DESC
ID DESC;
我個人會這樣做,因為我覺得BETWEEN有點不直觀。
SELECT TOP 1 ID, [FROM], [TO], [MAX]
FROM [MyTable].[dbo].[MagicPlan]
ORDER BY
CASE WHEN [FROM] <= @VAL AND [TO] >= @VAL THEN 1 ELSE 0 END DESC
ID DESC;
DBFiddle.uk
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/523362.html
