将动态值传递给oracle

时间:2015-08-26 11:34:04

标签: oracle

我想按照以下方式对记录进行排序。

  1. 在组中排列记录(按ID列)

  2. 按升序排序第1步结果(按名称列)

    2.1。如果NAME列具有相同的值,则按FLAG列值(升序)

  3. 排序
  4. 通过订单辅助列订购步骤2结果(我将通过动态值传递使用订单辅助列进行排序)

  5. 我的查询:

    SELECT IDENTIFIER, CODE, INC_EXC_FLAG,ORDER_ASSIST FROM DUMMY_SORT 
    WHERE METHOD_ID = '1'
    GROUP BY (IDENTIFIER, CODE, INC_EXC_FLAG,ORDER_ASSIST)
    ORDER BY ORDER_ASSIST ASC, CODE ASC, INC_EXC_FLAG ASC
    

    上述查询结果:

    ID      NAME    FLAG    ORDER_ASSIST
    A_EC     AEC    0         EC1
    B_EC_DET BEC    1         EC2
    A_NIT    ANIT   0         NIT1
    A_NIT    ANIT   1         NIT1
    A_NIT    BNIT   0         NIT1
    B_NIT_DET BNIT  0         NIT2
    B_NIT_DET BNIT  1         NIT2
    A_SC      ASC   0         SC1
    A_SC      ASC   1         SC1
    B_SC_DET  BSC   0         SC2
    B_SC_DET  BSC   1         SC2
    C_SC_FUN  CSC   0         SC3
    D_SC_GRP  DSC   0         SC4
    

    但我想根据order_assist

    的动态值生成结果

    例如:

    如果我将动态值传递给" SC"我想fisrt命令记录SC1,SC2,SC3。然后是NIT1,NIT2。然后是EC1,EC2。 如果我将动态值传递给" NITG"我想fisrt订购记录NIT1,NIT2然后SC1,SC2,SC3。 EC1,EC2。

    当动态值为" SC"

    时,会添加预期结果
    ID        NAME    FLAG  ORDER_ ASSIST
    A_SC       ASC      0      SC1
    A_SC       ASC      1      SC1
    B_SC_DET   BSC      0       SC2
    B_SC_DET   BSC      1       SC2
    C_SC_FUN   CSC      0       SC3
    D_SC_GRP   DSC      0        SC4
    A_NIT      ANIT     0       NIT1
    A_NIT      ANIT     1       NIT1
    A_NIT      BNIT     0       NIT1
    B_NIT_DET  BNIT     0        NIT2
    B_NIT_DET  BNIT     1        NIT2
    A_EC       AEC      0       EC1
    B_EC_DET   BEC      1       EC2
    

2 个答案:

答案 0 :(得分:2)

听起来像是在你之后的事情:

order by case when p_sort_param = 'SC' and order_assist like 'SC%' then 1
              when p_sort_param = 'SC' and order_assist like 'NIT%' then 2
              when p_sort_param = 'NITG' and order_assist like 'NIT%' then 1
              when p_sort_param = 'NITG' and order_assist like 'SC%' then 2
              else 3
          end,
          order_assist

其中p_sort_param是传入的参数,用于提供" dynamic"值。这假设您通过存储过程运行查询。如果它是手动运行的查询(例如,在Toad中),则在参数名称前添加冒号以生成:p_sort_param

答案 1 :(得分:1)

我无法理解您的具体订购规则,但您应该能够使用CASE表达式实现您想要的目标:

order by 
    case order_assist
        when 'SC' then <first thing to order by for SC>
        when 'NITG' then <first thing to order by for NITG>
        ...
        end,
    case order_assist
        when 'SC' then <second thing to order by for SC>
        when 'NITG' then <second thing to order by for NITG>
        ...
        end,
    ... etc.