user1683987
user1683987

Reputation: 533

How to sort individual rows in descending order?

I have a table which looks like the following:

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

I would like to sort INDIVIDUAL ROWS and display based on TYPE

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

I don't want to break the table apart into individual tables, then sort it, and then update it back to the original table.

so, the output will looks something like this, for tPoints - i need to display all

15  - John Johnny
12  - Joe P. 

and for aPoints

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

and so on ...

in a nutshell, if type = 1 then sort tPoints in descending, if type = 2 then sort aPoints, if type = 3 then sort sPoints, and so on....

what would be an efficient way to chive this?

Regards,

Upvotes: 1

Views: 131

Answers (1)

Nick Krasnov
Nick Krasnov

Reputation: 27251

For the sake of simplicity this example includes only two types. Add as many types as you need.

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.

Upvotes: 1

Related Questions