【发布时间】:2014-11-19 11:22:40
【问题描述】:
我有以下 SQL 语句,其中 order by 子句是动态传递的。 如何将“按 asc 和 desc 排序”动态传递给 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,
我该怎么做?
【问题讨论】:
-
order by没有意义。无论:odb的值如何(1或null的值),它总是按常数值排序 - 因此它根本不是真正的“排序”。 -
@a_horse_with_no_name 我有多个案例陈述。所以不确定如何将 asc 或 desc 传递给 sql 或动态函数。
-
如果列是数字的,你可以使用类似
column_name * -1的东西来进行降序排序,这可以变成动态的。但同样:您当前的示例不会对任何内容进行排序。 -
@a_horse_with_no_name 如果是这种情况如何动态传递
order by参数和asc和desc? -
只是为了消除混淆,@Polppan,当你写
ORDER BY 1时,1的意思是“第一列”。但是当你写ORDER BY CASE WHEN ... THEN 1 END时,1不再意味着第一列,它只是文字值1,就像@a_horse_with_no_name 状态一样。当您在ORDER BY中执行表达式时,您不能使用使用列号的快捷方式,但必须命名列(或列别名)。
标签: sql oracle sql-order-by