私はSQLが初めてなので、この種のタスクに最適なアプローチがわかりません。
行のグループがすべて同じ項目に関連しているテーブルがあり、その名前が最初の列に表示されます。その他の詳細は、他の列に表示されます。最初の列に同じ値があることに基づいて、すべてのグループのすべての行を取得しようとしています。特定の値が 1 つの列に表示されるたびに、次の行の別の列に別の値が表示されます。
| Fruit | Value1| Value2|
--------------------------
| APPLE | A | |
| APPLE | | E |
| PEAR | A | |
| PEAR | | X |
| FIG | | X |
| FIG | A | |
| CHERRY | A | |
| CHERRY | | X |
| CHERRY | A | |
| CHERRY | | X |
| GRAPE | | X |
| GRAPE | | T |
| ORANGE | A | |
| ORANGE | | X |
| ORANGE | | Y |
| ORANGE | | Z |
| PEACH | B | |
| PEACH | A | |
| PEACH | | X |
| MANGO | B | |
| MANGO | C | |
| MANGO | D | |
上記のテーブルから、特定の果物のすべての行を選択したいと思います。ここで、Value1 は 1 つの行の A であり、Value2 は次の行の X であり、その果物の行の Value1 には A 以外は何も表示されません。
上記の表から、クエリは次のような結果を返す必要があります。
| Fruit | Value1| Value2|
--------------------------
| PEAR | A | |
| PEAR | | X |
| CHERRY | A | |
| CHERRY | | X |
| CHERRY | A | |
| CHERRY | | X |
| ORANGE | A | |
| ORANGE | | X |
| ORANGE | | Y |
| ORANGE | | Z |
- Value1=A、Value2!=X の行の次の行にあるため、APPLE は除外されます。
- Figure は、Value1=A の後の行ではなく、Value2=X の前の行に発生するため、除外されます。
- Value1=A の行がないため、GRAPE は除外されます。
- Value1!=A の行が少なくとも 1 行あるため、PEACH は除外されます。
- Value1=A の行がなく、Value2=X の行もないため、MANGO は除外されます。
私には少し難しいと思われる部分は、行のグループのレベルでいくつかのチェックを実行していますが、それでも一致するグループのすべての行を返します。
ヒントや提案をお寄せいただきありがとうございます。質問を明確にするために私が必要な場合はお知らせください。データベースは z/OS 上の DB2 V10 です。