質問: ### 前提・実現したいこと Oracle sqlを使用し、2つの表から在庫量を集計したいです。 このようなパターンの集計作業は初なので、方針等アドバイスいただけないでしょうか。 今回使用するテーブルはこちらの2つです。 **■TDP00(月次単位で作成する総在庫量データ)** (データ例) | 年月 | アイテム | 在庫量 | 登録日 | | --- | --- | --- | --- | | 202004 | アイテム1 | 1295.8 | 20200507 | | 202005 | アイテム1 | 1298.8 | 20200602 | | 202006 | アイテム1 | 1189.4 | 20200702 | | 202007 | アイテム1 | 1187.6 | 20200804 | | ... | | | | **■TDF00(入出庫に際して作成する入出庫量データ)** (データ例 ※マイナスは出庫に相当します) | 登録日 | アイテム | 入出庫量 | | --- | --- | --- | | 20200528 | アイテム1 | 3 | | 20200602 | アイテム1 | -42.6 | | 20200616 | アイテム1 | -55 | | 20200622 | アイテム1 | -6.3 | | 20200622 | アイテム1 | 2.5 | | 20200623 | アイテム1 | -8 | | 20200729 | アイテム1 | -1.8 | | ... | | | 2つのテーブルも元に このような1つのテーブルを作成したいです。 | 登録日 | アイテム | 在庫量 | | --- | --- | --- | | 20200507 | アイテム1 | 1295.8 | | 20200528 | アイテム1 | 1298.8 | | 20200602 | アイテム1 | 1298.8 | | 20200602 | アイテム1 | 1256.2 | | 20200616 | アイテム1 | 1201.2 | | 20200622 | アイテム1 | 1194.9 | | 20200622 | アイテム1 | 1197.4 | | 20200623 | アイテム1 | 1189.4 | | 20200702 | アイテム1 | 1189.4 | | 20200729 | アイテム1 | 1187.6 | | 20200804 | アイテム1 | 1187.6 | | ... | | | ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: 回答しようとしたら、分析関数で被っていたので、分析関数を使用しないパターンで。 ``` select 登録日, アイテム, 数量 as 在庫量, 識別 from ( select 年月, 登録日, アイテム, 0 as 識別, 在庫量 as 数量 from TDF00 union all select substr(t1.登録日, 1, 6), t1.登録日, t1.アイテム, 1, sum(t2.入出庫量) from tdf00 t1 left join tdf00 t2 on substr(t1.登録日, 1, 6) = substr(t2.登録日, 1, 6) and t1.アイテム = t2.アイテム and t1.登録日 >= t2.登録日 group by t1.年月, t1.登録日, t1.アイテム ) td order by 登録日, アイテム, 識別 ``` 但し、他の方と同様にTDF00の同じ日付のものの順序に関する情報がないので、同じ日付に集約されます。 手打ちで動作未確認ですので、悪しからず。