Betrachten Sie diese Daten:Berechnete Spalte für mehrere Zeilen basierend auf einreihige
user code score
1 1 50
1 2 100
2 1 100
3 2 100
4 2 50
Grundsätzlich ich alle Noten für jeden Benutzer erhalten möchten, aber ich möchte eine berechnete Spalte basierend auf nur Zeilen mit einem bestimmten Code.
So: CASE WHEN code = 2 AND score > 50 THEN 'Yes' ELSE 'No'
.
Aber ich möchte, dass die berechnete Spalte den Code 1
ignoriert.
sollte also sein, die Ergebnisse der oben genannten Daten:
user code score pass
1 1 50 Yes
1 2 100 Yes
2 1 100 No
3 2 100 Yes
4 2 50 No
Ich bin sicher, dass es einige Oracle-SQL-Funktion ist, die Daten zu partitionieren, aber ich weiß nicht, wie.
- Zeile 1: Ja, weil der gleiche Benutzer hat 100 in Reihe 2.
- Row 2: Ja, weil Code 2> 50
- Row 3: Nein, weil es ein Code 1 und sie ist don‘ t haben keine Code-2-Punkte.
- Row 4: Ja, weil es ein Code 2> 50
- Reihe 5: : Nein, weil es einen Code 2 niedriger als 51.
Basierend auf @ Antwort des mathguy ist, ich das gemacht
CASE
WHEN COUNT(CASE
WHEN (sortest_tesc_code = 'A02' AND sortest_test_score >= 23) OR
(sortest_tesc_code = 'S02' AND sortest_test_score >= 540) OR
(sortest_tesc_code = 'MPT' AND sortest_test_score >= 60) OR
(sortest_tesc_code = '66' AND sortest_test_score >= 3) THEN 1 END) OVER (PARTITION BY sortest_pidm) = 0 THEN 'No'
ELSE 'Yes'
END pass,
Überprüfen Sie die Daten jetzt, aber ich denke, das funktioniert.
Ich bin verwirrt. Was sollte "Pass" sein, wenn der Code 1 ist? Null? – xQbert
Also möchten Sie, dass das Ergebnis so viele Zeilen wie die Eingabe hat - und nicht nur eine Zeile pro Benutzer? Es scheint, dass die berechnete Spalte für einen bestimmten Benutzer in allen Zeilen den gleichen "Durchlauf" hat. Daher ist nicht klar, warum Sie mehr als eine Zeile pro Benutzer in der Ausgabe benötigen. – mathguy
'CASE WHEN code = 1 oder (code = 2 UND score> 50) DANN 'Yes' ELSE 'No' END' –