2012-11-30 183 views
1

我有一個表,如下所示:如何按降序對單個行進行排序?

Name LastName tPoints aPoints sPoints gPoints type 
John Johnny 15  14  13  10  1 
Joe  P.  12  11  26  10  1 
Matt Q.  11  26  37  44  2 
Sorine P.  55  9  8  7  2 
Ali  Ahmed 30  44  88  65  2 
...  ...  ..  ..  ..  ..  3    
               3 

我想顯示根據各行進行排序,並TYPE

注:i can't use order by in oracle because it sorts only 1 row and the others is sorted based on the first row

我不想打破將表分成單獨的表,然後對其進行排序,然後將其更新回原始表。

因此,輸出將看起來像這樣,對於tPoints - 我需要顯示所有

15 - John Johnny 
12 - Joe P. 

aPoints

44 - Ali Ahmed 
26 - Matt Q. 
9 - Sorine P. 

等等...

簡而言之,如果type = 1,則按降序排序tPoints,如果type = 2,則排序aPoints,如果type = 3,則排序s點,等等......

什麼將是一個有效的方法來韭菜?

Regards,

+0

行或列?你能給我們一個具體的例子嗎? – Will

+0

只需將其導出爲ex​​cel,然後重新排列它即可。 –

+0

@nathanhayfield這是一個存儲過程,不可能,但是謝謝 – user1683987

回答

1

爲簡單起見,此示例僅包含兩種類型。根據需要添加儘可能多的類型。

SQL> with t1(Name1, LastName, tPoints, aPoints, sPoints, gPoints, type1) as(
    2 select 'John' , 'Johnny', 15, 14, 13, 10, 1 from dual union all 
    3 select 'Joe' , 'P.' , 12, 11, 26, 10, 1 from dual union all 
    4 select 'Matt' , 'Q.' , 11, 26, 37, 44, 2 from dual union all 
    5 select 'Sorine', 'P.' , 55, 9 , 8 , 7, 2 from dual union all 
    6 select 'Ali' , 'Ahmed' , 30, 44, 88, 65, 2 from dual 
    7 ) 
    8 select type1 
    9  , tpoints 
10  , apoints 
11  , name1 
12  , Lastname 
13 from t1 
14 order by case when type1=1 then tpoints else type1 end desc, 
15   case when type1=2 then apoints else type1 end desc; 

    TYPE1 TPOINTS APOINTS NAME1 LASTNAME 
---------- ---------- ---------- ------ -------- 
     1   15   14 John Johnny 
     1   12   11 Joe P. 
     2   30   44 Ali Ahmed 
     2   11   26 Matt Q. 
     2   55   9 Sorine P. 
+0

這可能工作。只是想知道,如果我想使用上面的方法,我會遇到問題,但是將'insert into select'插入到新表中,所以我可以顯示,但是我想要 - ? – user1683987

+1

@ user1683987不,你不會遇到'insert into table select'的問題。而且,插入一個有序的數據集也沒有任何意義。 –

+0

我需要顯示每個類型單獨排序,所以我想這是我唯一的選擇。除非你知道另一種顯示方式 - – user1683987

相關問題