2017-01-12 14 views
0

いくつかの行を再集計し、別のテーブルからの集計情報を取得する方法を探しています。他のテーブル情報に基づく集計行

  • 私は、詳細な情報を1つのテーブルを持っている:のSKU
  • 別のテーブルとのチケットは、実際に一緒に販売されたのSKUのグループの構成、提供します(をすなわちSKUのパック)Iターンしたい
  • 私の詳細なチケット各チケット内SKUグループを識別することにより、テーブル、および可能な場合は、ここではパックのID /名前を持つすべてのSKUが1行に同じパックに属している

をマージするには、詳細なチケットのテーブルです:

ここで
ticket_id SKU  qty 
1   A   1 
1   B   2 
1   C   1 
1   D   1 
1   E   1 
2   F   1 
2   G   2 
2   B   1 
2   H   2 

は、パックの成分表です:

group_id SKU  SKU_qty 
A1   A  1 
A1   B  2 
A1   C  1 
A1   D  1 
B2   F  1 
B2   G  2 
B2   B  1 

詳細なチケットテーブルから、我々はそれを見ることができます:

  • チケット1は、実際にSKU
  • チケット2のA1基を有しますB2を持っている

したがって、すべてのパックsku

チケットは他のSKUを持つことができます - パックの一部ではありません。複数のパックで同じSKUを見つけることができます。

複数の言語(SQL、SASまたはR)を使用できますが、最初の「ショット」はSQLを試すことです。事前に

私は本当に開始する場所から分からない

...おかげ

+2

あなたのサンプルデータは、私にとって本当に混乱しています。解決しようとしている問題、それらのテーブルの関連性、そして最終テーブルが他の2つのテーブルからどのように引き出されるかを理解することは難しいです。あなたの例をもう少し詳しく説明できますか? –

+0

@OliverFrost追加情報で編集しました – ant1j

答えて

1

あなたは、私が得た出力されたクエリ以下

SELECT ticket_id, 
     case when sku is null then sku1 else group_id end group_id, 
     qty 
FROM(
    select ticket_id, group_id, g.sku, d.sku sku1, 
      ROW_NUMBER() OVER(PARTITION BY ticket_id) row_num, 
      qty 
    from detail d 
    left join grouping_ g 
    on d.SKU = g.SKU 
    order by ticket_id, D.sku)T1 
WHERE sku IS NULL OR row_num = 1; 

SQL DEMO

下に試すことができます

enter image description here

希望このウィールあなたを助けます。

+1

与えられた例からどのように作業したかはわかりませんが、正しければ賞です。 –

+0

あなたの質問の原則を説明して、なぜそれがうまくいくかを理解する可能性はありますか? – ant1j

関連する問題