Ich habe einige der Fragen bereits zu diesem Thema gefragt, aber keine beantwortet meine.sql - Probleme mit bedingten WHERE-Klausel mit CASE-Anweisung
Ich habe eine Tabelle, wo eine Spalte Zahlen halten können und nulls
auf der id Je schicke ich in meiner gespeicherten Prozedur, ich entweder zu wählen, wo die IDs sind null oder passen die ID oder alle von ihnen.
Hier ist, was ich habe, aber es funktioniert nicht.
pi_region_id = 51 bedeutet, ich brauche alle hrcc_id = null
pi_region_id nicht 51 oder 52 ist dann hrcc_id = pi_region_id
andere (was bedeutet, es 52 ist), bringt sie alle
SELECT i.indicator_id AS ID,
i.indicator_name_en AS name_en,
h.region_code
FROM indicators i
JOIN hrcc h ON h.hrcc_id = i.hrcc_id
WHERE (CASE WHEN pi_region_id = 51 THEN i.hrcc_id IS NULL
WHEN pi_region_id != 51 OR pi_region_id != 52 THEN i.hrcc_id := pi_region_id
ELSE NULL END)
ORDER BY i.hrcc_id ASC
Oracle gib mir ein "ORA-00905: fehlendes Schlüsselwort" mit dem Fehler scheint auf der i.hrcc_id IS NULL zu sein.
Ich bin immer noch sehr Neuling in pl/sql so jede Hilfe würde sehr geschätzt werden.
Vielen Dank!
UPDATE
Beispiel für meine Tabellen
ANZEIGER
INDICATOR_ID | INDICATOR_NAME_DE | HRCC_ID
1 | Etwas (null)
2 | Ein anderes | 1
3 | Wiederum | 2
HRCC
HRCC_ID | REGION_CODE
1 | QC
2 | ON
(sorry ... bekommen konnte es nicht besser aussehen)
Was ich brauche, ist, wenn:
pi_region_id 51 = nur Zeilen in ANZEIGER zurückzukehren, wo HRCC_ID IS NULL
pi_region_id 52 = eveything
pi_region_id = 1 zum Beispiel zurückzukehren, wo zurückzukehren Reihen auf INICATORS HRCC_ID = 1
Vielen Dank für Ihre Antwort. Es funktioniert fast. Die einzige Bedingung, die nicht funktioniert, ist die zweite "(pi_region_id = 51 und i.hrcc_id ist null)", wenn ich 51 für den Eingabeparameter pi_region_id setze, sollte es 6 Zeilen zurückgeben, gibt aber keine zurück. – Karinne
Dann muss es Probleme in anderen Teilen der Abfrage geben. Wenn Sie ein repräsentatives Beispiel Ihrer Tabellen anzeigen können, können wir weitere Fehler beheben. – mathguy
Zum Beispiel: einige hrcc_id kann von Ihrer Join-Bedingung abgelehnt werden, bevor Sie jemals die Where-Klausel erhalten. – mathguy