我是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 | |
從上面的表格,我想選擇一個給定的水果,其中值1是一個在一行中的所有行,值2爲X以下行,無非是其他出現在值1的任何爲那個水果排。
從上面的表格,查詢應提供的結果是這樣的:
| Fruit | Value1| Value2|
--------------------------
| PEAR | A | |
| PEAR | | X |
| CHERRY | A | |
| CHERRY | | X |
| CHERRY | A | |
| CHERRY | | X |
| ORANGE | A | |
| ORANGE | | X |
| ORANGE | | Y |
| ORANGE | | Z |
- 蘋果是一個後排除,因爲該行其中值1 = A, 值2 = X。
- 該圖被排除,因爲Value2 = X發生在Value1 = A之前的行, 而不是之後的行。
- GRAPE被排除,因爲Value1 = A時沒有行。
- PEACH被排除,因爲至少有一行Value1!= A。
- MANGO被排除,因爲Value1 = A沒有行,並且因爲 沒有行,其中Value2 = X。
對我來說似乎有點棘手的部分是在行組級別執行幾次檢查,但仍返回匹配組的所有行。
在此先感謝您的提示和建議。讓我知道你是否需要我澄清這個問題。數據庫是z/OS上的DB2 V10。
什麼是「下一行」呢?那就是,你爲了得到你看到的訂單而命令什麼?例如,如果你有以下順序的三行((PEAR,A,NULL),(PEAR,NULL,Y),(PEAR,NULL,X)),你不希望PEAR被返回,對嗎? –
這是正確的。對於此選擇,每當A出現在Value1中時,X必須出現在表格中下一行的Value2中。 – mlowry
再一次澄清可能會顯着改變查詢: Value1中的兩個或更多個連續的A實例可以。所以((PEAR,A,NULL),(PEAR,A,NULL),(PEAR,NULL,X))都可以。我沒有在表格中看到實例,但我可以想象它們存在。在這種情況下,我想要檢索所有PEAR行。總結:對於任意數量的連續(,A,NULL)行的組,下一行不是(,A,NULL)應該是(,NULL,X)。 –
mlowry