ID Value
001 100
002 125
003 150
004 175
005 200
006 225
...
期望輸出
- 如果用戶輸入之間100到124的值,則ID應顯示001
如果用戶輸入125到149之間的值,然後id應該顯示002
如果用戶輸入的值在200到224之間,那麼id sho ULD顯示005
- 如果用戶輸入至249 225之間的值,則ID應顯示006
如何使一個查詢上述條件。
需要查詢幫助
ID Value
001 100
002 125
003 150
004 175
005 200
006 225
...
期望輸出
如果用戶輸入125到149之間的值,然後id應該顯示002
如果用戶輸入的值在200到224之間,那麼id sho ULD顯示005
如何使一個查詢上述條件。
需要查詢幫助
在這裏你去:
首先創建測試表:
CREATE TABLE #Temp(ID INT, Val INT)
INSERT INTO #Temp VALUES(1, 100);
INSERT INTO #Temp VALUES(2, 125);
INSERT INTO #Temp VALUES(3, 150);
INSERT INTO #Temp VALUES(4, 175);
INSERT INTO #Temp VALUES(5, 200);
INSERT INTO #Temp VALUES(6, 225);
設置測試值
DECLARE @value INT
SET @value = 125
如果ID是連續的(即1,2,3,4,5,等)
SELECT t1.id
FROM #Temp t1, #Temp t2
WHERE t1.ID = t2.ID -1
AND @value BETWEEN t1.Val AND t2.Val -1
如果ID是不連續的(即1,2,5,7,8,等)
;WITH cte AS (SELECT ROW_NUMBER() OVER (ORDER BY id) AS rownum, ID, Val FROM #Temp)
SELECT t1.id
FROM cte t1, cte t2
WHERE t1.rownum = t2.rownum -1
AND @value BETWEEN t1.Val AND t2.Val -1
它會更容易編寫查詢轉換表像ID,ValueFrom,ValueTo。
對於這種表:
SELECT MAX(ID)
FROM Table1
WHERE Value <= @value
基本上,如果輸入155,編號1 2和3被返回,那麼MAX ID取(3),這是問題的答案。
我同意SQL,假設值始終是按順序的。但是,我完全不同意第一句話。通過在當前表上的'value,id'索引,您可以獲得最佳性能;以相同的順序假設。 – MatBailie 2012-03-25 12:02:12
在SELECT語句中使用CASE ....
如:
declare @c int;
set @c=120;
SELECT
CASE
WHEN @c BETWEEN 100 AND 124 THEN '001'
WHEN @c BETWEEN 125 AND 149 THEN '002'
ELSE 'Other'
END
這個答案沒有使用數據庫表。您是否建議每次表中的值更改時更改代碼? – MatBailie 2012-03-25 11:59:12
獲取最接近的匹配和值返回第一行之前排序:
select top 1 id
from range
where value <= @value
order by value desc
或者,如果您需要將此查詢合併到另一箇中:
select id
from range
where value = (select max(value) from range where value <= @value)
+1:爲OP提供期望的結果並且不假定ID始終處於有序狀態。 – MatBailie 2012-03-25 12:04:09
能的ID的不斷出訂單?未來可能會發生行7的值爲75的情況嗎? – MatBailie 2012-03-25 12:03:10