Supportnet / Forum / Datenbanken
verschachtelte Abfrage
Frage
Hallo, habe folgendes Problem und hoffe auf Eure Hilfe.
Ich muss aus einer Tabelle einer größeren DB nach bestimmten Kriterien ausfiltern.
Das Problem ist, dass die Tabelle folgendermaßen aussieht:
Kunde Parameter Value
Kunde1 Standort Berlin
Kunde1 Kundennummer 12354
Kunde1 Zuständiger Peter
Kunde1 AnzahlPCs 10
Kunde1 Betriebssystem Windows NT
Kunde2 Standort Bremen
Kunde2 Kundennummer 12647
Kunde2 Zuständiger Karl
Kunde2 AnzahlPCs 24
Kunde2 Betriebssystem Windows 2000
Kunde3 Standort Kassel
Kunde3 Kundennummer 15747
Kunde3 Zuständiger Peter
Kunde3 AnzahlPCs 4
Kunde3 Betriebssystem SunOS
...
Warum das so gemacht wurde weis ich auch nicht und kann es auch nicht ändern.
Jetzt brauche ich alle Kunden mit Standort=Berlin. Davon alle, die Peter als Ansprechpartner haben.
Eine eifache Abfrage würde ja so aussehen:
select * from Tabelle
where parameter=´Standort´ and value=´Berlin´
Damit sind aber alle anderen Zeilen der Kunden die nicht "Standort" bei Parameter haben weg oder?
Dann kann ich doch als nächstes nicht weiter nach parameter=´Zuständiger´ suchen, weil die Spalte ja schon ausgeschlossen wurde durch die erste Abfrage.
Vielleicht habe ich ja auch nur einen großen Denkfehler...
Danke,
Ben
Antwort 1 von disco
moin
das aller einfachste, ohne viel nachdenken, ist doch, dass du 2 abfragen machst. einmal fragste nach allen kundenIDs, die am standort Berlin sind und diese benutzte dann um alle anderen werte zu holen
mit etwas mühe, mehr lust und kenntnissen, als ich sie habe, wird das sicher auch in einem SQL-Statement gehen...
g,
disco
das aller einfachste, ohne viel nachdenken, ist doch, dass du 2 abfragen machst. einmal fragste nach allen kundenIDs, die am standort Berlin sind und diese benutzte dann um alle anderen werte zu holen
mit etwas mühe, mehr lust und kenntnissen, als ich sie habe, wird das sicher auch in einem SQL-Statement gehen...
g,
disco
Antwort 2 von hikE
hmm... dann mach doch ne ODER Abfrage bei der du den Parameter "Zuständiger" und den Value "Peter" auf die gleiche Weise abfragst wie "Standort" und "Berlin".
Wenn du das als Tabellenerstellungs-Abfrage machst, kannst du in der neuen Tabelle anschliessend nach
Berlin UND Peter filtern.
Klingt mindestens so kompliziert wie der Aufbau eurer DB... und ist sicher nur ein Workaround, um aus so ner DB n brauchbares Ergebnis zu kriegen
vielleicht hat ja auch noch jemand anders hier ne intelligentere Lösung...
Gruss hikE
Wenn du das als Tabellenerstellungs-Abfrage machst, kannst du in der neuen Tabelle anschliessend nach
Berlin UND Peter filtern.
Klingt mindestens so kompliziert wie der Aufbau eurer DB... und ist sicher nur ein Workaround, um aus so ner DB n brauchbares Ergebnis zu kriegen
vielleicht hat ja auch noch jemand anders hier ne intelligentere Lösung...
Gruss hikE
Antwort 3 von erik
Ich schließe mich der Meinung von disco an: Zuerst die KundenID filtern und darauf dann einen Filter nach "Zuständiger". Eine entsprechende Abfrage würde so aussehen:
Zur besseren Übersicht kann der Teil in Klammern auch als separate Abfrage abgespeichert und eingebunden werden.
SELECT * FROM Tabelle INNER JOIN
(SELECT Kunde FROM Tabelle WHERE Parameter = "Standort" AND Value = "Berlin") AS StandortFilter ON Tabelle.Kunde = StandortFilter.Kunde WHERE Parameter = "Zuständiger" AND Value = "Peter";Zur besseren Übersicht kann der Teil in Klammern auch als separate Abfrage abgespeichert und eingebunden werden.
Antwort 4 von der_benn
Tabellenerstellungs-Abfrage geht nicht, da kein Access benutzt wird. Es geht alles über ben Browser auf eine Oracle DB.
Vielleicht habe ich mich auch ein bischen unglücklich ausgedrückt. Im Endeffekt soll eine Zeile dann so aussehen, wenn nach Standort=Berlin und Zuständiger=Peter sortiert wurde:
Kunde1 | Berlin | Peter | 12354 | 10 | Windows NT
Das Probelm ist besteht ja auch darin, dass dann alles für einen Kunden in einer Zeile stehen soll.
MfG
ben
Vielleicht habe ich mich auch ein bischen unglücklich ausgedrückt. Im Endeffekt soll eine Zeile dann so aussehen, wenn nach Standort=Berlin und Zuständiger=Peter sortiert wurde:
Kunde1 | Berlin | Peter | 12354 | 10 | Windows NT
Das Probelm ist besteht ja auch darin, dass dann alles für einen Kunden in einer Zeile stehen soll.
MfG
ben
Antwort 5 von disco
Zitat:
Es geht alles über ben Browser auf eine Oracle DB.
Es geht alles über ben Browser auf eine Oracle DB.
wenn du von vornherein vernünfige antworten haben möchtest, splltest du auch gleich zu anfang, alle nötigen angaben machen. wenn hier keine DB genannt wird, gehen immer alle gleich von access aus, weil es meisstens so ist, dass leute die keine angaben machen, gar nicht wissen das es auch noch was anderes ausser access gibt...
Zitat:
Das Probelm ist besteht ja auch darin, dass dann alles für einen Kunden in einer Zeile stehen soll
Das Probelm ist besteht ja auch darin, dass dann alles für einen Kunden in einer Zeile stehen soll
wie du die daten auf der html-seite präsentierst ist nicht sache, des sql-satatements.
g,
disco
Antwort 6 von der_benn
Habe meinen Fehler auch bemerkt, als das Wort Tabellenerstellungs-Abfrage fiel ;-)
Hatte eigentlich nicht vor, Verwirrung zu stiften. Ich weis auch nicht genau, ob das Forum überhaupt der richtige Anlaufpunkt ist. Hatte halt nur die Gruppe Datenbanken gesehen und dachte mir: Hier bin ich richtig".
MfG
ben
Hatte eigentlich nicht vor, Verwirrung zu stiften. Ich weis auch nicht genau, ob das Forum überhaupt der richtige Anlaufpunkt ist. Hatte halt nur die Gruppe Datenbanken gesehen und dachte mir: Hier bin ich richtig".
MfG
ben

