Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle DB order by IN_Sql_Oracle - Fatal编程技术网

Sql Oracle DB order by IN

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

这个问题是针对Oracle DB的

我有一组作为主键的值,并希望获得这些主键的其他相应值。以下查询适用于以下情况:

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,非常感谢您的帮助