我想在顯示的記錄,以便在where子句.. 例如:如何顯示按where子句排序的表中的記錄?
select name from table where name in ('Yaksha','Arun','Naveen');
它顯示Arun,Naveen,Yaksha (alphabetical order)
我想它顯示爲同一順序i.e 'Yaksha''Arun','Naveen'
如何顯示此... 我正在使用oracle
db。
我想在顯示的記錄,以便在where子句.. 例如:如何顯示按where子句排序的表中的記錄?
select name from table where name in ('Yaksha','Arun','Naveen');
它顯示Arun,Naveen,Yaksha (alphabetical order)
我想它顯示爲同一順序i.e 'Yaksha''Arun','Naveen'
如何顯示此... 我正在使用oracle
db。
添加此ORDER BY
在查詢的結尾:
order by case name when 'Yaksha' then 1
when 'Arun' then 2
when 'Naveen' then 3
end
(有沒有其他辦法可以拿到貨,你需要一個ORDER BY得到一個特定的結果集的順序。)
它工作正常..ThanQ – Charan
可能有點笨重,但你可以創建自定義排序與case
表達:
SELECT *
FROM my_table
WHERE name IN ('Yaksha', 'Arun','Naveen')
ORDER BY CASE name WHEN 'Yaksha' THEN 1
WHEN 'Arun' THEN 2
WHEN 'Naveen' THEN 3
END ASC
稍長的選擇,但一字符串文字是使用子查詢:
SELECT m.*
FROM my_table m
JOIN (SELECT 'Yaksha' AS name, 1 AS name_order FROM dual
UNION ALL
SELECT 'Arun' AS name, 2 AS name_order FROM dual
UNION ALL
SELECT 'Naveen' AS name, 3 AS name_order FROM dual) o
ON o.name = m.name
ORDER BY o.name_order ASC
你可以像下面這樣試試:如果你的列表是某種動態
SELECT *
FROM test
WHERE name IN ( 'Yaksha', 'Arun', 'Naveen' )
ORDER BY instr (q'['Yaksha', 'Arun', 'Naveen']', name) ASC
這種方式可能是有用的。
如果值的列表是動態的,或者您只是不想重複您可以使用的值(或濫用,取決於您的觀點)表集合,並將您的真實表加入table collection expression而不是使用IN
:
select your_table.name
from table(sys.odcivarchar2list('Yaksha','Arun','Naveen')) t
join your_table on your_table.name = t.column_value;
通常會工作,但當然沒有order by語句不保證工作,所以你可以使用內嵌視圖分配的順序:
select your_table.name from (
select row_number() over (order by null) as rn, column_value as name
from table(sys.odcivarchar2list('Yaksha','Arun','Naveen'))
) t
join your_table on your_table.name = t.name
order by t.rn;
這仍然依賴於row_number() over (order by null)
使用集合中元素的順序;這依靠收集unnesting保存元素順序。我認爲這也不能保證,所以仍然存在一些風險。
+1雖然涉及風險,但它完全回答了OP的需求,需要動態值。當然,它不能一概而論,因爲一般的答案不在現存問題的範圍之內。 –
你有沒有想過','btwn''Yaksha''Arun''? – Praveen
您是使用固定的值列表還是變量 - 在哪些情況下值是從哪裏來的? –
@Praveen,我正在使用,在 – Charan