...ORDER BY 3
按照第3列排序 没问题
...ORDER BY DECODE(vSORT_IDX,0,DLV_DT,1,STR_CD,2,ITEM_CD,3,TRD_CD)
vSORT_IDX = 2 的时候 按照第3列排序(ITEM_CD为第三列) 没问题
...ORDER BY vSORT_IDX + 1
没有报错 但是不能实现排序 请问问题出在哪里?

解决方案 »

  1.   

    order by 列+1,你想要实现用哪列排序呢?
      

  2.   

      不明白,当vSORT_IDX是几的时候报错?
      

  3.   

    2楼 vSORT_IDX = 2 vSORT_IDX + 1 = 3  第3列阿 这个没错
        问题是只认识 3 不认识 vSORT_IDX + 1
    3楼 没有报错 但是不排序
      

  4.   

    应该是ORACLE的order by中就没这种写法吧。
    按第3列排序,你的前两种方法都很好啊。
    按某列+1这样排序,在实际应用中应该没这种需求吧。
      

  5.   

    不加1 直接...ORDER BY vSORT_IDX(第2列排序)
    也不能排序 不知道为什么 vSORT_IDX定义为number型的
      

  6.   

    try to_number(vSORT_IDX + 1)
      

  7.   

    to_number试过了 还是不行
    再说vSORT_IDX 本身就是number型的
    大概和6楼说的一样 那说明这种方式只能跟常量了有高手解答吗?
      

  8.   

    这好像是应为如果写 order by 3, oracle把3当成是列号,而当你写成vSORT_IDX+1时,甚至即使你写成2+1的时候,oracle会把它当成一个用于排序的表达式,估计要有什么办法明确告诉oracle这是一个列号而不是一个比表达式,但目前我也还不知道要怎么去写,不然你也可以用动态语句解决这个问题。