SQL 动态 ASC 和 DESC

标签 sql oracle sql-order-by

我有以下 SQL 语句,其中 order by 子句是动态传递的。
如何将“按升序和降序排序”动态传递给 SQL?

SELECT table1.prod_id,table2.prod_name from table1 left outer join table2
              ON table1.prod1 = table2.prod_id 
              ORDER BY CASE WHEN :odb = 1 THEN prod_id END

我要通行证order by asc or desc动态到上面的SQL,

我怎样才能做到这一点?

最佳答案

您可以通过操作数字或数据值来解决@TonyAndrews 之类的问题。对于 VARCHAR2动态 SQL 的替代方案可能是有两个表达式:

order by
   case when :sorting='ASC' then col1 end ASC,
   case when :sorting='DESC' then col1 end DESC

:sorting具有值 'ASC'结果ORDER BY变得就像是:
order by
   col1 ASC,
   NULL DESC

:sorting具有值 'DESC'结果ORDER BY变得就像是:
order by
   NULL ASC,
   col1 DESC

这种方法的一个缺点是优化器可以跳过 SORT 操作的那些情况,因为涉及的索引使数据已经按预期排序,当使用这样的 CASE 方法时不会发生这种情况。无论如何,这将强制执行排序操作。

关于SQL 动态 ASC 和 DESC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27015623/

相关文章:

sql - Linq to 3 个没有外键的表

sql - Visual Basic 访问 : Too few parameters. 预期 1

.net - linq 等效 SQL 查询 "not in (select query)"

java - Java 中的使用领域限制?

java - 将表从 Oracle 复制到 Redis

java - Oracle Java : Isn't NLS_TERRITORY enough to correctly format a number?

mysql - 查询获取 12 个月内 TOP 3 行

mysql - SQL根据多对多关系中的条件对记录进行排序

mysql - 将 MySQL 表重新格式化为网格

sql - 如何清除oracle执行计划缓存进行基准测试?