需要Oracle Query Tune才能获得订单

时间:2015-08-19 11:47:12

标签: sql oracle syntax sql-order-by

我有两张桌子:

ORDER BY

我使用以下查询SELECT SUBSTR(Methods_Type, 1, 10) AS disMisType FROM METHOD_TABLE MET LEFT JOIN METHOD_TYPES TRMT ON MET.Ser_Method_Type = TRMT.Methods_Type ORDER BY (NLSSORT(MET.Ser_Method_Type, 'NLS_SORT=binary_ai')) DESC NULLS FIRST;

(null)
All_Methods
(null)
social
private12345678

输出:

{{1}}

但我需要先命令所有的空值。 请提供确切的查询。

3 个答案:

答案 0 :(得分:2)

使用您提供的数据 - 并添加额外的列,我得到:

with method_types as (select 1 id, 'public' methods_type from dual union all
                      select 2 id, 'ALL_Methods' methods_type from dual union all
                      select 3 id, 'private1235678' methods_type from dual union all
                      select 4 id, 'social' methods_type from dual),
     method_table as (select 1 ser_id, null ser_method_type, 'AAAA' emp_name from dual union all
                      select 2 ser_id, null ser_method_type, 'BBBB' emp_name from dual union all
                      select 3 ser_id, 'All_Methods' ser_method_type, 'Rama' emp_name from dual union all
                      select 4 ser_id, 'social' ser_method_type, 'Raja' emp_name from dual union all
                      select 5 ser_id, 'private12345678' ser_method_type, 'Rakesh' emp_name from dual)
select substr(trmt.methods_type,1,10) as dismistype,
       met.*,
       trmt.*
from   method_table met
       left join method_types trmt on (met.ser_method_type = trmt.methods_type)
order by (nlssort(met.ser_method_type, 'NLS_SORT=binary_ai')) desc nulls first;

DISMISTYPE                         SER_ID SER_METHOD_TYPE EMP_NAME         ID METHODS_TYPE  
------------------------------ ---------- --------------- -------- ---------- --------------
                                        1                 AAAA                              
                                        2                 BBBB                              
social                                  4 social          Raja              4 social        
                                        5 private12345678 Rakesh                            
                                        3 All_Methods     Rama

这不是您的预期输出所显示的,但它可能解释了为什么您在结果中看到显然无序的空值 - 您正在选择trmt.methods_type列,但是按met.ser_method_type列排序。如果method_types表中的任何行都没有与method_table中的行匹配,那么当然你会看到空值,但是因为 IS 是method_table中的一个值,它们很可能会被显示< em>在具有值的行之后。

也许您需要做的就是更改所选的列 来自substr(trmt.methods_type,1,10)substr(met.ser_method_type,1,10)

或更改订单子句 来自nlssort(met.ser_method_type, 'NLS_SORT=binary_ai')nlssort(trmt.methods_type, 'NLS_SORT=binary_ai')

答案 1 :(得分:1)

我不确定您的查询为什么不起作用,但您可以更明确地order by

ORDER BY (CASE WHEN MET.Ser_Method_Type IS NULL THEN 1 ELSE 2 END),
         NLSSORT(MET.Ser_Method_Type, 'NLS_SORT=binary_ai') DESC 

答案 2 :(得分:1)

您只能为订单创建CASE列:

select SUBSTR(Methods_Type,1,10)AS disMisType,
       SUBSTR(CASE WHEN Methods_Type IS NULL THEN '0' ELSE Methods_Type END ,1,10) AS disMisTypeORDER
FROM   METHOD_TABLE MET
       LEFT JOIN METHOD_TYPES TRMT
         ON MET.Ser_Method_Type = TRMT.Methods_Type
ORDER BY disMisTypeORDER