Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql order by需要Oracle查询调优_Sql_Oracle_Syntax_Sql Order By - Fatal编程技术网

Sql order by需要Oracle查询调优

Sql order by需要Oracle查询调优,sql,oracle,syntax,sql-order-by,Sql,Oracle,Syntax,Sql Order By,我有两张桌子: METHOD_TYPES ---- ---------------- ID Methods_Type ---- ---------------- 1 public 2 ALL_Methods 3 private1235678 4 social METHOD_TABLE -------- ----------------- ---------- Ser_ID Ser_Method_Type Emp_Name -------- --

我有两张桌子:

METHOD_TYPES
---- ----------------
 ID   Methods_Type
---- ----------------
 1    public
 2    ALL_Methods
 3    private1235678
 4    social


METHOD_TABLE
-------- ----------------- ----------
 Ser_ID   Ser_Method_Type   Emp_Name
-------- ----------------- ----------
 1        (null)            AAAA
 2        (null)            BBBB
 3        All_Methods       Rama
 4        social            Raja
 5        private12345678   Rakesh
我使用下面的查询来查询订购人:

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
但是我需要先把所有的空值都排序。
请提供准确的查询。

我不确定为什么您的查询不起作用,但您可以通过获得更明确的
订单:

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 

我不确定您的查询为什么不起作用,但您可以通过
获得更明确的
订单:

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 

您只能为订单创建案例列:

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

您只能为订单创建案例列:

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

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

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\u type列,但按met.ser\u method\u type列排序。如果method_types表中没有任何行与method_表中的行匹配,那么您当然会看到空值,但是因为method_表中有一个值,它们很可能会显示在有值的行之后

也许您所需要做的就是更改所选的列 从
substr(trmt.methods\u type,1,10)
substr(met.SERU方法类型,1,10)

或更改订单条款 从
nlssort(met.ser\u method\u type,'NLS\u SORT=binary\u ai')

nlssort(trmt.methods\u type,'NLS\u SORT=binary\u ai')
使用您提供的数据,并在额外的列中添加,我得到:

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\u type列,但按met.ser\u method\u type列排序。如果method_types表中没有任何行与method_表中的行匹配,那么您当然会看到空值,但是因为method_表中有一个值,它们很可能会显示在有值的行之后

也许您所需要做的就是更改所选的列 从
substr(trmt.methods\u type,1,10)
substr(met.SERU方法类型,1,10)

或更改订单条款 从
nlssort(met.ser\u method\u type,'NLS\u SORT=binary\u ai')
到nlssort(trmt.methods\u type,'NLS\u SORT=binary\u ai')