Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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 查询未正确排序_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql 查询未正确排序

Sql 查询未正确排序,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有以下查询,我不是为了产生结果而编写的: select distinct "ID","Name" from ( select myview.ID as "ID", myview.Name as "Name", rank() over (partition by myview.ID order by myview.OTHER_ID DESC, rownum) rnk from my_view myview )where rnk = 1 ORDER BY "Name" DESC;

我有以下查询,我不是为了产生结果而编写的:

select distinct "ID","Name"
  from (
select myview.ID as "ID", myview.Name as "Name",
     rank() over (partition by myview.ID order by myview.OTHER_ID DESC, rownum) rnk 
from my_view myview
)where rnk = 1
ORDER BY "Name" DESC;
我需要按名称属性排序,这是一个字符串,但它不是排序,即使我有ORDERBY name语句。我怎样才能按名字订购

因此,对于
name
列,它按以下顺序返回数据:

 368838, "AUSER03232, JOHN"
 368532, "BUSER000417, JANE"
  20252, "BUSER108276, JANE"
  75235, "AUSER01809, JANE"

不同的
是不必要的(尽管它不应影响的顺序)。您的
rank()
包括
rownum
——这将使每一行都是唯一的。因此,只需使用
row\u number()
代替,并去掉
distinct

select "ID", "Name"
from (select myview.ID as "ID", myview.Name as "Name",
             row_number() over (partition by myview.ID order by myview.OTHER_ID DESC) as seqnum 
      from my_view myview
     ) v
where seqnum = 1
order by "Name" DESC;
这节省了重复删除的开销


造成问题的一个原因是,如果在“按名称排序”中使用单引号而不是双引号:
按“名称排序”与“按名称排序”有很大不同
您的输出数据与该查询不一致

使用“输出”数据。。并将其反馈到查询中,运行结果将产生完全不同的输出。。我想你在编造一些东西

请,请。。发布一个完整的工作示例。。从头到尾。。包括表格创建,或像我一样输入数据。。。你自己跑吧。。并给出了实际结果。。复制/粘贴。。不要手动按摩,试图使其“看起来更像问题”。如果它没有重新制造你的“问题”,那么它就不是一个好例子;)


注意:我提供了一个查询,在这个查询中,任何人现在都可以轻松、重复地复制/粘贴并在其服务器上运行。他们可以很容易地确认它是否产生了与我相同的结果,或者不同的结果,然后很容易地说出我做错了什么(如果有的话)…)

因为这看起来很合理,所以您需要向我们展示一些原始数据、您现在获得的输出以及您希望看到的输出。列数据类型以及NLS_排序和NLS_COMP设置可能也很有用,例如,如果这不仅仅是对何时应用排序的误解。rank子句中的
rownum
在做什么-它应该在做什么?它们的顺序正确。升序是A-Z,降序是Z-A。
JOHN
JANE
降序之前。而且副本中的顺序并不确定,因为您没有说应该发生什么-例如,
按“Name”DESC排序,按“ID”DESC排序。但由于目前还不清楚您为什么认为它是错误的,所以不确定这是否相关。它的订购是否正确?AUSER01809,JANE不是第二个吗?这是我需要订购的方式。对不起,我弄错了。我提供的数据是名称的值,而不是ID和名称,只是名称。因此name列的值是“AUSER01809,JANE”,rownum是按顺序排列的,而不是分区,因此它不会使它变得更唯一;只有当有一个重复的ID,另一个ID对时才会有任何影响?即使如此,它的影响充其量也是不确定的…@AlexPoole。我很确定它将防止
order by
中的重复,这反过来意味着
rank()
将永远不会返回重复的值。
  with w_data as (
        select 368838 ID, 'AUSER03232, JOHN'  Name from dual union all
        select 368532 ID, 'BUSER000417, JANE' Name from dual union all
        select  20252 ID, 'BUSER108276, JANE' Name from dual union all
        select  75235 ID, 'AUSER01809, JANE'  Name from dual
        )
  select distinct ID, Name
    from (
        select myview.ID as ID, myview.Name as Name,
             rank() over (partition by myview.ID order by myview.ID DESC, rownum) rnk 
        from w_data myview
        ) 
  where rnk = 1
  ORDER BY Name DESC;

          ID NAME
  ---------- -----------------
       20252 BUSER108276, JANE
      368532 BUSER000417, JANE
      368838 AUSER03232, JOHN
       75235 AUSER01809, JANE

  SQL>