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

INDIVIDUAL ROWS を並べ替えて表示したい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 の場合は sPoints を並べ替えます。

これをチャイブする効率的な方法は何ですか?

よろしく、

4

1 に答える 1

1

簡単にするために、この例には 2 つのタイプのみが含まれています。必要な数のタイプを追加します。

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.
于 2012-11-30T19:35:53.217 に答える