2016-09-09 6 views
-1

私はテーブルのデータに現在以下のようなデータがあります。 ウィンドウ関数を使用して、child_startchild endカラムに基づく数値の行が必要です。SQLウィンドウは、開始フラグと行の終了フラグに基づいて機能します

データサンプル負荷123のために上記データに

LoadNumber |DispatchNumber|ChildLoadStart|ChildLoadEnd | 
--------------------------------------------------------- 
123  | A   |1    |1    | 
--------------------------------------------------------- 
123  |B    |1    |0    | 
--------------------------------------------------------- 
123  |C    |0    |0    | 
--------------------------------------------------------- 
123  |D    |0    |1    | 
--------------------------------------------------------- 

I、すなわち2つのつの子負荷を持っているが、ディスパッチ・Aは、一件の負荷とディスパッチB、C、D形もう一つの子負荷です。 以下のように、各子の読み込みに番号を付ける必要があります。 結果は以下のようになります。誰かが私にこれを助けることができますか?

LoadNumber |DispatchNumber|ChildLoadStart|ChildLoadEnd |Order   | 
----------------------------------------------------------------------- 
123  | A   |1    |1    |1    | 
------------------------------------------------------------------------ 
123  |B    |1    |0    |1    | 
------------------------------------------------------------------------ 
123  |C    |0    |0    |2    | 
------------------------------------------------------------------------ 
123  |D    |0    |1    |3    | 
------------------------------------------------------------------------ 
+0

への努力をしてください。サンプルデータと予想される結果を画像ではなくテキストとして送信します。 –

+1

これらの番号を割り当てるロジックを説明してください – dnoeth

+0

B、C、Dが同じ "子の負荷"の場合、同じ識別子を持たないのはなぜですか? (例えば、ディスパッチナンバー) –

答えて

1

DispatchNumberは、データを注文するために使用することができた場合:

ROW_NUMBER() 
OVER (PARTITION BY LoadNumber 
     ORDER BY DispatchNumber 
     RESET WHEN ChildLoadStart = 1) 
0

おそらく@dnoethによって提案されたreset when句はここに必要とされているまさにです。しかし、私はTeradataに慣れていないので、以下はオラクルの代替案です。おそらくこれは誰かにとって役に立ちます。まず

累積和を使用してグループにデータを分割して、row_number()ためpartition by clauseにこの列(grp)を使用します。

select loadnumber, dispatchnumber, childloadstart, childloadend, 
     row_number() over (partition by loadnumber, grp order by dispatchnumber) as "ORDER" 
    from (
    select data.*, 
      sum(childloadstart) over (partition by loadnumber order by dispatchnumber) grp 
     from data) 

テストデータと出力:

create table data (LoadNumber number(4), DispatchNumber varchar2(2), 
        ChildLoadStart number(1), ChildLoadEnd number(1)); 

insert into data values (123, 'A', 1, 1); 
insert into data values (123, 'B', 1, 0); 
insert into data values (123, 'C', 0, 0); 
insert into data values (123, 'D', 0, 1); 

LOADNUMBER DISPATCHNUMBER CHILDLOADSTART CHILDLOADEND  ORDER 
---------- -------------- -------------- ------------ ---------- 
     123 A       1   1   1 
     123 B       1   0   1 
     123 C       0   0   2 
     123 D       0   1   3 
関連する問題