Sql Oracle DB order by IN
这个问题是针对Oracle DB的 我有一组作为主键的值,并希望获得这些主键的其他相应值。以下查询适用于以下情况:Sql Oracle DB order by IN,sql,oracle,Sql,Oracle,这个问题是针对Oracle DB的 我有一组作为主键的值,并希望获得这些主键的其他相应值。以下查询适用于以下情况: SELECT value1, value2, value3 FROM mytable WHERE value1 IN ( 13548, 65435, 56455 ) 但是,该查询以不同的顺序返回行,我希望有一个查询以括号中列出的顺序返回行。是否可以使用Oracle DB执行此操作?您需要一个order by子句 ORDER BY CASE WHEN VALUE1 = 6543
SELECT value1, value2, value3
FROM mytable
WHERE value1 IN ( 13548, 65435, 56455 )
但是,该查询以不同的顺序返回行,我希望有一个查询以括号中列出的顺序返回行。是否可以使用Oracle DB执行此操作?您需要一个order by子句
ORDER BY CASE WHEN VALUE1 = 65435 THEN 20000 ELSE VALUE1 END
如果仅按值1排序,则结果将按数字顺序排列,即13548564556435
如果希望以定义的非数字顺序返回列,可以伪造ORDERBY子句
ORDER BY CASE WHEN VALUE1 = 65435 THEN 20000 ELSE VALUE1 END
这使得65k仅在订购时看起来像20k,因此它最终将位于其他两个值之间。您可以添加其他when语句来更改更多值的顺序
没有按in子句排序的默认方式。您需要一个order by子句
ORDER BY CASE WHEN VALUE1 = 65435 THEN 20000 ELSE VALUE1 END
如果仅按值1排序,则结果将按数字顺序排列,即13548564556435
如果希望以定义的非数字顺序返回列,可以伪造ORDERBY子句
ORDER BY CASE WHEN VALUE1 = 65435 THEN 20000 ELSE VALUE1 END
这使得65k仅在订购时看起来像20k,因此它最终将位于其他两个值之间。您可以添加其他when语句来更改更多值的顺序
没有按in子句排序的默认方式。按排序会很麻烦,但您可以这样做:
order by case value1 when 13458 then 1 when 65435 then 2 when 56455 then 3 end
按订购会很麻烦,但您可以这样做:
order by case value1 when 13458 then 1 when 65435 then 2 when 56455 then 3 end
有一种方法可以做到这一点:
with id_list (id, sort_order) as
(
select 13548, 1 from dual
union all
select 65435, 2 from dual
union all
select 56455, 3 from dual
)
SELECT value1, value2, value3
FROM mytable
JOIN id_list ON id_list.id = mytable.value1
ORDER BY id_list.sort_order
Oracle缺少
values
row构造函数,这使得编写这篇文章有点难看,但它基本上满足了您的需求。当您添加新值时,您不需要按更改顺序 有一种方法可以做到这一点:
with id_list (id, sort_order) as
(
select 13548, 1 from dual
union all
select 65435, 2 from dual
union all
select 56455, 3 from dual
)
SELECT value1, value2, value3
FROM mytable
JOIN id_list ON id_list.id = mytable.value1
ORDER BY id_list.sort_order
Oracle缺少values
row构造函数,这使得编写这篇文章有点难看,但它基本上满足了您的需求。当您添加新值时,您不需要按
更改顺序 您没有ORDERBY子句,因此结果以随机顺序返回。添加“按价值订购1”是的,这将按价值订购1,但我希望按照我在in条款中给出的顺序订购。因此,如果我说“IN(C,Z,N),我希望它以该顺序返回,而不是C,N,ZNo,你不能这样做。IN子句中元素的顺序与Oracle无关。is与添加(value1=13548或value1=xxxx)相同,etcAh好的,谢谢你的帮助。嗯,你没有ORDER BY子句,所以结果是以随机顺序返回的。添加“ORDER BY value1”是的,这将按value1排序,但我想按in子句中给出的顺序进行排序。因此,如果我说“in(C,Z,N),我希望它以该顺序返回,而不是C,N,N,你不能那样做。in子句中元素的顺序与Oracle无关。与添加(value1=13548或value1=xxxx)相同,etcAh OK,非常感谢您的帮助