0

ここで興味深い問題があります。しかし、私はすでにエレガントではない方法で解決しているので、それは単なる知識です。

私は貸衣装を持っているテーブルを持っており、彼らは所有者または扶養家族である可能性があり、この関係は家族として説明されています. 各ファミリは、所有者と 0-n の従属のみを持つことができます。所有者は H で識別され、扶養家族は D で識別されます。

私が必要としているのは、所有者とその扶養家族の名前でデータを並べ替える方法です。というわけで以下のサンプルデータ

idcostumer      name                 idfamily        relation
    1         Natalie Portman           1               H
    2         Mark Twain                3               D
    3         Carl Sagan                2               D
    4         Bob Burnquist             2               H
    5         Sheldon Cooper            1               D
    6         Anakin Skywalker          4               H
    7         Luke Skywalker            4               D
    8         Leia Skywalker            4               D
    9         Burnquist Jr.             2               D
    10        Micheal Jackson           3               H
    11        Sharon Stone              1               H
    12        Michelle Pfeiffer         3               D

上記の結果を 1 回のクエリで取得することは可能ですか? ご覧のとおり、注文は名前です(所有者のみ)

idcostumer      name                 idfamily        relation
    6         Anakin Skywalker          4               H
    8         Leia Skywalker            4               D
    7         Luke Skywalker            4               D
    4         Bob Burnquist             2               H
    9         Burnquist Jr.             2               D
    3         Carl Sagan                2               D
    10        Micheal Jackson           3               H
    2         Mark Twain                3               D
    12        Michelle Pfeiffer         3               D
    11        Sharon Stone              1               H
    1         Natalie Portman           1               D
    5         Sheldon Cooper            1               D

この例のテスト ケース データ。

create table costumer (
    idcostumer integer primary key,
    name varchar2(20),
    idfamily integer,
    relation varchar2(1)
);

これは、このテーブルの挿入ステートメントです。

insert into costumer values ( 1 , 'Natalie Portman'  , 1, 'D');
insert into costumer values ( 2 , 'Mark Twain'       , 3, 'D');
insert into costumer values ( 3 , 'Carl Sagan'       , 2, 'D');
insert into costumer values ( 4 , 'Bob Burnquist'    , 2, 'H');
insert into costumer values ( 5 , 'Sheldon Cooper'   , 1, 'D');
insert into costumer values ( 6 , 'Anakin Skywalker' , 4, 'H');
insert into costumer values ( 7 , 'Luke Skywalker'   , 4, 'D');
insert into costumer values ( 8 , 'Leia Skywalker'   , 4, 'D');
insert into costumer values ( 9 , 'Burnquist Jr.'    , 2, 'D');
insert into costumer values ( 10, 'Micheal Jackson'  , 3, 'H');
insert into costumer values ( 11, 'Sharon Stone'     , 1, 'H');
insert into costumer values ( 12, 'Michelle Pfeiffer', 3, 'D');

私はいくつかのことを試しました.connect byステートメントとfamilyidを関係に連結して父と太陽の関係を作成しました。関係の説明とファミリ ID による over 句の順序付けで row_count を使用しましたが、この方法では名前の順序が失われました。

4

2 に答える 2

2

試す:

select * from table order by idfamily desc, relation desc, name asc    

フィドルへのリンク

不自然な順序の場合は、「union all」を使用できます。

select * from (select idcostumer, name, idfamily, relation from costumer 
  where idfamily > 3
  order by idfamily desc, relation desc, name asc)
union all
select * from (
  select idcostumer, name, idfamily, relation from costumer 
  where idfamily = 2
  order by idfamily desc, relation desc, name asc)
union all
select * from (
  select idcostumer, name, idfamily, relation from costumer 
  where idfamily != 2 and idfamily < 4
  order by idfamily desc, relation desc, name asc)

フィドルへのリンク

于 2013-10-23T21:14:03.937 に答える