Hallo,
ich bin neu hier im Forum und hoffe ihr könnt mir bei folgendem Problem lösen:
Tabelle Kunden:
Tabelle Datenschutz:
Gewünschtes Ergebnis:
Was ich bisher versucht habe (bitte nicht lachen):
Wenn ich in die Subselects mich auf eine Kundenreferenz beschränke, funktioniert die Abfrage. Wenn ich sie aber starte wie oben angegeben, dann bekomme ich die Rückmeldung
"ORA-01427: Unterabfrage für eine Zeile liefert mehr als eine Zeile
01427. 00000 - "single-row subquery returns more than one row"
*Cause:
*Action:"
Ungeachtet der Fehlermeldung gibt es sicherlich eine einfachere / elegantere Lösung für mein Problem. Es wäre super, wenn mir jemand bei meinem Problem unter die Arme greifen könnte.
Vielen Dank vorab!
VG,
HalliGalli
ich bin neu hier im Forum und hoffe ihr könnt mir bei folgendem Problem lösen:
- Tabelle "Kunden" und "Datenschutz" sollen vereint werden, Ergebnis soll Kunde mit den verschiedenen Datenschutzmerkmalen sein
- es gibt eine eindeutige Referenz, über die beide Tabellen verbunden werden können
- Zugriff auf die Tabellen mittels SQL-Developer (v.3.2.20.09)
- vorhandene Kenntnisse: rudimentär (habe bisher für alle Anforderungen die Abfragen zusammen-geklöppelt bekommen, aber hier beiße ich mir seit Tagen die Zähne aus)
- woran ich scheitere: ich bekomme die Datenschutzkennzeichen nicht in die Spalten sortiert (s. Beispieltabellen)
Tabelle Kunden:
KDNR | KREF | MARKE | DATUM |
800100 | 12 | 11.12.10 | |
800100 | 12 | A | 31.05.10 |
800101 | 13 | A | 01.01.10 |
800101 | 13 | B | 02.01.10 |
Tabelle Datenschutz:
KREF | MARKE | MERKMAL | ZUSTIMMUNG |
12 | Y | ||
12 | TEL | N | |
12 | POST | N | |
12 | A | EMAIL_A | N |
12 | A | TEL_A | Y |
12 | A | POST_A | N |
13 | A | EMAIL_A | Y |
13 | A | TEL_A | Y |
13 | A | POST_A | Y |
13 | B | EMAIL_B | N |
13 | B | TEL_B | N |
13 | B | POST_B | N |
... | |||
... |
Gewünschtes Ergebnis:
KDNR | MARKE | DATUM | TELEFON | POST | ||
800100 | 11.12.10 | Y | N | N | ||
800100 | A | 31.05.10 | N | Y | N | |
800101 | A | 01.01.10 | Y | Y | Y | |
800101 | B | 02.01.10 | N | N | N |
Was ich bisher versucht habe (bitte nicht lachen):
Code:
SELECT DISTINCT LPAD (K.KDNR,6,'0'), K.MARKE, K.DATUM, CASE K.MARKE WHEN '' THEN (SELECT D.ZUSTIMMUNG FROM DATENSCHUTZ D JOIN KUNDEN K ON K.KREF=D.KREF AND D.MERKMAL='EMAIL') WHEN 'A' THEN (SELECT D.ZUSTIMMUNG FROM DATENSCHUTZ D JOIN KUNDEN K ON K.KREF=D.KREF AND D.MERKMAL='EMAIL_A') WHEN 'B' THEN (SELECT D.ZUSTIMMUNG FROM DATENSCHUTZ D JOIN KUNDEN K ON K.KREF=D.KREF AND D.MERKMAL='EMAIL_B') END AS EMAIL, CASE K.MARKE WHEN '' THEN (SELECT D.ZUSTIMMUNG FROM DATENSCHUTZ D JOIN KUNDEN K ON K.KREF=D.KREF AND D.MERKMAL='TEL') WHEN 'A' THEN (SELECT D.ZUSTIMMUNG FROM DATENSCHUTZ D JOIN KUNDEN K ON K.KREF=D.KREF AND D.MERKMAL='TEL_A') WHEN 'B' THEN (SELECT D.ZUSTIMMUNG FROM DATENSCHUTZ D JOIN KUNDEN K ON K.KREF=D.KREF AND D.MERKMAL='TEL_B') END AS TELEFON, CASE K.MARKE WHEN '' THEN (SELECT D.ZUSTIMMUNG FROM DATENSCHUTZ D JOIN KUNDEN K ON K.KREF=D.KREF AND D.MERKMAL='POST') WHEN 'A' THEN (SELECT D.ZUSTIMMUNG FROM DATENSCHUTZ D JOIN KUNDEN K ON K.KREF=D.KREF AND D.MERKMAL='POST_A') WHEN 'B' THEN (SELECT D.ZUSTIMMUNG FROM DATENSCHUTZ D JOIN KUNDEN K ON K.KREF=D.KREF AND D.MERKMAL='POST_B') END AS POST FROM KUNDEN K JOIN DATENSCHUTZ D ON K.KREF = D.KREF
"ORA-01427: Unterabfrage für eine Zeile liefert mehr als eine Zeile
01427. 00000 - "single-row subquery returns more than one row"
*Cause:
*Action:"
Ungeachtet der Fehlermeldung gibt es sicherlich eine einfachere / elegantere Lösung für mein Problem. Es wäre super, wenn mir jemand bei meinem Problem unter die Arme greifen könnte.
Vielen Dank vorab!
VG,
HalliGalli
Comment