前提
SQL(Oracle)でデータを編集しています。
想定したデータにならず、お知恵をお借りできますと幸いです。
以下の私が考えていた以外の方法でも、やり方があればご教示いただきたく思います。
よろしくお願いします。
実現したいこと
週次でシステムからCaseのデータを記録しており、以下のTable1のようなデータを作成しています。ですが、システム上クローズ後にはデータが作成されなくなるため、Table2のようなデータを作ろうとしています。データの記録日は毎月1、8、15、22、29(2月は28日)です。
■Table1
Case No date stage last flag
Case1 20220101 ステージ1 N
Case1 20220108 ステージ1 N
Case1 20220115 ステージ2 N
Case1 20220122 ステージ4 N
Case1 20220129 ステージ5 N
Case1 20220201 クローズ Y
Case2 20220108 ステージ3 N
Case2 20220115 ステージ4 N
Case2 20220122 クローズ Y
■Table2
Case No date stage last flag
Case1 20220101 ステージ1
Case1 20220108 ステージ1
Case1 20220115 ステージ2
Case1 20220122 ステージ4
Case1 20220129 ステージ5
Case1 20220201 クローズ
Case1 20220208 クローズ
以下続く
Case2 20220108 ステージ3
Case2 20220115 ステージ4
Case2 20220122 クローズ
Case2 20220129 クローズ
Case2 20220201 クローズ
Case1 20220208 クローズ
以下続く
該当のソースコード
Create TABLE Table2
SELECT
dt.date
tr.*
from 日付マスタ dt
LEFT JOIN Table1 tr
ON dt.date = tr.date
;
試したこと
日付マスタを作ってそれを左表にしてTable1と結合すれば、日付の右にNULLのセルができ、そこに、Table1のLast flagがついているデータを追加すればできるかと思っていたのですが、うまくいかずどうすればよいか困っているところです。上のSQLで下のような表ができたらいいなと思っていまいた。
イメージ
Case No date stage last flag
20220108 Case2 20220108 ステージ3 N
20220115 Case2 20220115 ステージ4 N
20220122 Case2 20220122 クローズ Y
20220129
20220201
Last flag Yのみを集めたTableもあり、ここから上表のnullを埋めようとしていましたが、上表が作れず挫折しています。
Case1 20220201 クローズ Y
Case2 20220122 クローズ Y
よろしくお願いします。
0 コメント