我想按照以下方式对记录进行排序。
在组中排列记录(按ID列)
按升序排序第1步结果(按名称列)
2.1。如果NAME列具有相同的值,则按FLAG列值(升序)
通过订单辅助列订购步骤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
但我想根据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
答案 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.