bitte mich auf dieses Problem mit einer Lösung helfen ..Filter Zeilen basierend auf bestimmten Bedingungen
Tisch wie das ist -
Type | SubType | Flag | Value
--------------------------------
123 | A1 | Y | 101
--------------------------------
123 | A2 | Y | 102
------------------------------
123 | A3 | Y | 103
------------------------------
124 | A4 | N | 104
------------------------------
124 | A5 | N | 105
------------------------------
124 | A6 | N | 106
------------------------------
125 | A7 | Y | 107
------------------------------
125 | A8 | Y | 108
------------------------------
125 | A9 | N | 109
------------------------------
125 | A10 | N | 110
Voraussetzung ist, um Zeilen auszuwählen, basierend auf bestimmten Bedingungen - , wenn alle Flags sind Y für einen bestimmten Typ. Wählen Sie dann nur die Zeile mit dem niedrigsten Subtyp, , wenn alle Flags N für einen bestimmten Typ sind. Wählen Sie dann alle Zeilen dieses Typs , wenn Flags für einen Typ eine Kombination aus Y und N sind dieser Typ - einer mit dem niedrigsten Subtyp von Flag Y und einer mit dem niedrigsten Subtyp e der Flagge N.
So soll die Ausgabe von obiger Tabelle aussehen -
Type | SubType | Flag | Value
------------------------------
123 | A1 | Y | 101
------------------------------
124 | A4 | N | 104
------------------------------
124 | A5 | N | 105
------------------------------
124 | A6 | N | 106
------------------------------
125 | A7 | Y | 107
------------------------------
125 | A9 | N | 109
Sorry für schlechte Tabellenformate, Vielen Dank im Voraus für die in diesen suchen.
Das wird nicht funktionieren, weil 'Verwendung von DISTINCT mit der OVER clause' ist nicht erlaubt. – Serge
Dank GurV, versuchte mit deutlichen entfernen und in der Partition mit nach wie diesem, aber es würde nicht wieder die ganze Art 124 (Zustand 2) ---- select * aus ( wählen t. *, count (flag) über (Partition nach Typ, Flag) cnt, row_number() über (Partition nach Typ, Flag nach Subtyp sortiert) rn von your_table t ) t wo (cnt = 1 und (rn = 1 oder flag = ' N ')) oder (cnt <> 1 und rn = 1); – rai01