DB - OracleSQL - Filter Ergebnismenge basierend auf Wert
Alle Einschränkungen entfallen.
create table customer (cid number(10), cname varchar(50));
create table exercise (eid number(10), ecode varchar(2));
-- mapping table
create table customer_exercise (cid number(10), eid number(10), cnt number(10))
Daten
Customer table
100 e1
200 e2
300 e3
400 e4
Exercise table
1 c1
2 c2
3 c3
4 c4
Customer_Exercise
cid eid count
100 1 20
200 2 50
100 2 30
300 4 10
SQL:
SELECT c.cid
,e.eid
,COALESCE(SUM(ce.cnt), 0) AS total_cnt
FROM customer c
CROSS JOIN exercise e
LEFT JOIN customer_exercise ce
ON ce.cid = c.cid
AND ce.eid = e.eid
WHERE c.cid IN (100, 200, 300)
AND e.eid IN (1, 2)
GROUP BY c.cid, e.eid
Ergebnis:
cid eid total_cnt
100 1 20
100 2 30
200 1 0
200 2 50
300 1 0
300 2 0
Gibt es einen Weg, um Kunden in der für jede Übung ids ohne Einträge, um herauszufiltern in Klausel?
Für z.B. Der Kunde 300 hat keine Zeilen für die Trainings-ID 1 oder 2. Dieser Kunde sollte nicht im Ergebnis enthalten sein. Kunde 200 hat keine Zeilen für Übung 1, aber Daten für Übung 2, daher wird erwartet, dass er als Zähler 0 für Übung 1 angezeigt wird.
Wie erhalte ich eine Ergebnismenge wie unten?
Erwartetes Ergebnis:
cid eid total_cnt
100 1 20
100 2 30
200 1 0
200 2 50
Dies ist keine Gruppierung nach Ausdruckfehler. – rayne
Danke, Rayne, ich habe es behoben. – wolfrevokcats