在oracle中将动态值传递给订单记录

在oracle中将动态值传递给订单记录,oracle,Oracle,我想按以下方式对记录进行排序 按组排列记录(按ID列) 按升序(按名称列)对步骤1结果排序 2.1。如果名称列具有相同的值,则按标志列值排序(升序) 按顺序辅助列对步骤2的结果进行排序(我将使用顺序辅助列传递动态值进行排序) 我的查询: SELECT IDENTIFIER, CODE, INC_EXC_FLAG,ORDER_ASSIST FROM DUMMY_SORT WHERE METHOD_ID = '1' GROUP BY (IDENTIFIER, CODE, INC_EXC_FLAG,

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

  • 按组排列记录(按ID列)

  • 按升序(按名称列)对步骤1结果排序

    2.1。如果名称列具有相同的值,则按标志列值排序(升序)

  • 按顺序辅助列对步骤2的结果进行排序(我将使用顺序辅助列传递动态值进行排序)

  • 我的查询:

    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
    
    以上查询结果:

    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的动态值生成结果

    例如:

    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
    
    如果我将动态值作为“SC”传递,我希望首先对记录SC1、SC2、SC3进行排序。然后是NIT1,NIT2。然后EC1,EC2。 如果我将动态值作为“NITG”传递,我希望首先对记录NIT1、NIT2进行排序,然后是SC1、SC2、SC3。然后EC1,EC2

    动态值为“SC”时添加的预期结果


    我无法理解您的具体排序规则,但您应该能够使用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.
    
    orderby
    案件处理及协助
    什么时候“SC”呢
    什么时候“Niting”呢
    ...
    完,,
    案件处理及协助
    什么时候“SC”呢
    什么时候“Niting”呢
    ...
    完,,
    ... 等
    
    我无法理解您的具体订购规则,但您应该能够使用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.
    
    orderby
    案件处理及协助
    什么时候“SC”呢
    什么时候“Niting”呢
    ...
    完,,
    案件处理及协助
    什么时候“SC”呢
    什么时候“Niting”呢
    ...
    完,,
    ... 等
    
    我无法理解您的具体订购规则,但您应该能够使用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.
    
    orderby
    案件处理及协助
    什么时候“SC”呢
    什么时候“Niting”呢
    ...
    完,,
    案件处理及协助
    什么时候“SC”呢
    什么时候“Niting”呢
    ...
    完,,
    ... 等
    
    我无法理解您的具体订购规则,但您应该能够使用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.
    
    orderby
    案件处理及协助
    什么时候“SC”呢
    什么时候“Niting”呢
    ...
    完,,
    案件处理及协助
    什么时候“SC”呢
    什么时候“Niting”呢
    ...
    完,,
    ... 等
    
    听起来你想要的可能是:

    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是传入以提供“动态”值的参数。这假设您正在通过存储过程运行查询。如果是手动运行的查询(例如,在Toad中),则在参数名称前面添加冒号,以使
    :p_sort_param

    听起来可能是您想要的:

    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是传入以提供“动态”值的参数。这假设您正在通过存储过程运行查询。如果是手动运行的查询(例如,在Toad中),则在参数名称前面添加冒号,以使
    :p_sort_param

    听起来可能是您想要的:

    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是传入以提供“动态”值的参数。这假设您正在通过存储过程运行查询。如果是手动运行的查询(例如,在Toad中),则在参数名称前面添加冒号,以使
    :p_sort_param

    听起来可能是您想要的:

    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是传入以提供“动态”值的参数。这假设您正在通过存储过程运行查询。如果是手动运行的查询(例如在Toad中),则在参数名称前添加冒号,以使
    :p_sort_param

    排序规则不明确。规则是,我的group by query将按预期对记录进行分组,但我希望动态排序,就像我的类通过“SC1”一样要排序辅助列,我想将记录排序为SC1、SC2、SC3、SC4、NITG1、NITG2、EC1、EC2。如果NIT1传递给订单协助,我想作为NIT1、NIT2再订购SC1、SC2、SC3。然后是EC1,EC2。排序规则不清楚。规则是,我的group by query将按照我的预期对记录进行分组,但我希望动态排序记录,例如,如果我的类将“SC1”传递到order\u assist列,则我希望将记录排序为SC1、SC2、SC3、SC4、NITG1、NITG2、EC1、EC2。如果NIT1传递给订单协助,我想作为NIT1、NIT2再订购SC1、SC2、SC3。然后是EC1,EC2。排序规则不清楚。规则是,我的group by query将按照我的预期对记录进行分组,但我希望动态排序记录,例如,如果我的类将“SC1”传递到order\u assist列,则我希望将记录排序为SC1、SC2、SC3、SC4、NITG1、NITG2、EC1、EC2。如果NIT1传递给订单协助,我想作为NIT1、NIT2再订购SC1、SC2、SC3。然后是EC1,EC2。排序规则不清楚。规则是,我的group by query将按照我的预期对记录进行分组,但我希望动态排序记录,例如,如果我的类将“SC1”传递到order\u assist列,则我希望将记录排序为SC1、SC2、SC3、SC4、NITG1、NITG2、EC1、EC2。如果NIT1传递给订单协助,我想作为NIT1、NIT2再订购SC1、SC2、SC3。然后EC1,EC2。在上述情况下,我不会得到记录顺序为SC1,SC2,SC3,SC4,NITG1,NITG2,EC1,EC2。我的预期结果是,当SC1被动态地传递给ORDER_ASSIST时,我希望以SC1、SC2、SC3、SC4、NITG1、NITG2、EC1、EC2的形式订购。如果NIT1传递给订单协助,我想作为NIT1、NIT2再订购SC1、SC2、SC3。然后EC1,EC2。在上述情况下,我不会得到记录顺序为SC1,SC2,SC3,SC4,NITG1,NITG2,EC1,EC2。我的预期结果是,当SC1被动态地传递给ORDER_ASSIST时,我希望以SC1、SC2、SC3、SC4、NITG1、NITG2、EC1、EC2的形式订购。如果NIT1传递给订单协助,我想作为NIT1、NIT2再订购SC1、SC2、SC3。然后EC1,EC2。在上述情况下,我不会得到记录顺序为SC1,SC2,SC3,SC4,NITG1,NITG2,EC1,EC2。我的预期结果是当SC1被动态地传递给我想要的ORDER_ASSIST时