我的代碼喜歡;
SELECT * FROM TABLE WHERE FNO IN(1,8,3,7,11,2)
這個查詢結果像
FNO
1
2
3
7
8
11
我怎樣才能得到像我的狀況一樣的結果。像;
FNO
1
8
3
7
11
2
uj5u.com熱心網友回復:
將值放入集合中,然后為集合索引生成行號并按此排序:
SELECT t.*
FROM table_name t
INNER JOIN (
SELECT ROWNUM AS rn,
COLUMN_VALUE AS value
FROM TABLE(SYS.ODCINUMBERLIST(1, 8, 3, 7, 11, 2))
) v
ON (t.fno = v.value)
ORDER BY v.rn;
其中,對于樣本資料:
CREATE TABLE table_name (fno, item) AS
SELECT LEVEL, 'Item' || LEVEL FROM DUAL CONNECT BY LEVEL <= 12;
輸出:
FNO 物品 1 專案1 8 專案8 3 第 3 項 7 第 7 項 11 專案 11 2 專案2
db<>在這里擺弄
uj5u.com熱心網友回復:
您可以使用 ORDER BY 和 CASE WHEN 的組合,例如:
SELECT fno
FROM table
WHERE fno IN (1,8,3,7,11,2)
ORDER BY CASE fno
WHEN 1 THEN 1
WHEN 8 THEN 2
WHEN 3 THEN 3
WHEN 7 THEN 4
WHEN 11 THEN 5
WHEN 2 THEN 6
END
看這個例子在這里作業:db<>fiddle
uj5u.com熱心網友回復:
您可以使用以下命令訂購DECODE:
SELECT *
FROM yourTable
WHERE FNO IN (1, 8, 3, 7, 11, 2)
ORDER BY DECODE(FNO, 1, 1, 8, 2, 3, 3, 7, 4, 11, 5, 2, 6);
如果您期望許多值中的每一個都需要自定義排序級別,那么您應該維護一個存盤此資訊的第二個表:
Table: FNO_SORT
FNO | pos
1 | 1
2 | 6
3 | 3
7 | 4
8 | 2
11 | 5
現在我們可以加入這個表,然后使用該pos欄位進行排序:
SELECT t.*
FROM yourTable t
INNER JOIN FNO_SORT f ON f.FNO = t.FNO
WHERE t.FNO IN (1, 8, 3, 7, 11, 2)
ORDER BY f.pos;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/469011.html
標籤:甲骨文
