我是 SQL 新手,所以我不确定哪种方法最适合此类任务:
我有一个表,其中行组都与同一项目相关,其名称出现在第一列。其他详细信息显示在其他列中。我正在尝试根据第一列中的相同值来检索每个组的所有行,其中每次某个值出现在一个列中时,另一个值出现在下一行的不同列中。
| 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 | |
从上表中,我想为给定的 Fruit 选择所有行,其中 Value1 在一行上是 A,Value2 在下一行是 X,在该 Fruit 的任何行上的 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 |
- APPLE 被排除在外,因为在 Value1=A,Value2!=X 的行之后。
- 由于 Value2=X 出现在 Value1=A 之前的行上,而不是之后的行上,因此排除了 FIG。
- GRAPE 被排除在外,因为没有 Value1=A 的行。
- PEACH 被排除在外,因为至少有一行 Value1!=A。
- MANGO 被排除在外,因为没有 Value1=A 的行,并且没有 Value2=X 的行。
对我来说似乎有点棘手的部分是在行组级别执行多项检查,但仍返回匹配组的所有行。
提前感谢您的提示和建议。如果您需要我澄清这个问题,请告诉我。数据库是 z/OS 上的 DB2 V10。