2016-04-04 21 views
0

Ben sonuçlar üretmek için yazmadım aşağıdaki sorgu var emretmiyorum İsim beyanına göre sıralayın. İsme göre nasıl sipariş verebilirim?Sorgu düzgün

Yani name sütun için veri bu düzende verileri döndürür:

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

Bu makul görünüyorsa, bize bazı ham veriler göstermeniz gerekir. Şimdi elde ettiğiniz çıktı ve görmeyi beklediğiniz çıktı. Örneğin, örneğin ne zaman uygulandığına dair bir yanlış anlama değilse, sütun veri türü ve NLS_SORT ve NLS_COMP ayarlarınız da yararlı olabilir. Rütbeli rütbede ne yapıyor? Bu ne yapıyor? –

+0

Güncelleştirilen Soru. – user2924127

+2

Bunlar doğru şekilde sipariş edildi. Artan A-Z, azalan Z-A'dır. JOHN, JANE'nin inişinden önce gelir. –

cevap

0

distinct gerekli değildir (order by etkilememelidir rağmen). Sizin rank(), rownum içerir - her satır benzersizdir. Bu nedenle, sadece yerine row_number() kullanıp distinct kurtulmak:

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; 

Bu yinelenen kaldırma yükü kaydeder. Eğer order by tek tırnak yerine çift tırnak kullanılırsa sorununuzu neden olacak

Bir şey şudur: order by "Name"order by 'Name' oldukça farklıdır.

+0

Rownum, bölüm tarafından değil, sırayla, yani daha fazla benzersiz olmaz; ve yinelenen bir kimlik, OTHER_ID çifti olsaydı herhangi bir etkisi olurdu? O zaman bile etkisi en iyi ihtimalle deterministik olmazdı ... –

+0

@AlexPoole. . . “Sırayla” içinde çiftleri önleyeceğinden eminim ki bu da sırayla - rank() 'ın asla yinelenen değerler döndürmeyeceği anlamına gelir. –

0

Çıktı verileriniz bu sorguyla tutarlı değil.

"Çıktı" verilerinizi kullanarak .. ve sorguya geri besleyip, sonuçta tamamen farklı bir çıktı elde edersiniz.

Lütfen, lütfen LÜTFEN .. TAMAMEN ÇALIŞIYOR DÖNGÜSÜ .. baştan sona .. tablo oluşturma veya giriş verileri gibi ... kendiniz çalıştırın ... ve gerçek sonuçları göster .. copy/yapıştırılmış .. bunu "daha fazla sorun gibi görünmesini" denemek için elle masaj yapmayın. o olmazsa o zaman iyi bir örnek değil, senin "sorun" yeniden oluşturmak;

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> 

Not I KİMSE artık kolayca, kopyalama/yapıştırma ve onların sunucuda çalıştırabilirsiniz hangi bir sorgu sağladı), ve tekrarlanabilir. Onlar, aynı sonuçları veya farklı bir şeyi üretip üretmediklerini kolayca teyit edebilirler ve sonra ne yaptığımı kolayca söyleyebilirler (eğer bir şey varsa) ..;)