mischanj 10 Geschrieben 18. August 2011 Melden Geschrieben 18. August 2011 Hallo Liebe Forumgemeinde, ich benötige mal wieder eure Hilfe... Es gibt eine SQL Abfrage in der ich mehrere Daten auslese und aufliste. Momentan zeigt er mir so viele Datensätze(da mehrere Ansprechpartner sind) wie einem Kunde zuwiesen sind. Sprich: Kunden.KDnr 1 Anschrift1 Ansprechpartner1 Kunden.KDnr 1 Anschrift1 Ansprechpartner2 Kunden.KDnr 1 Anschrift1 Ansprechpartner3 Kunden.KDnr 2 Anschrift1 Ansprechpartner1 Kunden.KDnr 2 Anschrift1 Ansprechpartner2 aber eigentlich hätte ich es lieber wenn pro Kunde nur eine Zeile angezeigt wird und irgendein Ansprechpartner (erste oder letzte..) genommen wird. Meine Abfrage hänge ich an, es wäre super wenn mir jemand helfen könnte. Danke. SELECT Kunden.KDnr as Kunde, Anschriften.Name1, Anschriften.Name2, Anschriften.Name3, Kunden.Branche1, Anschriften.Strasse, Anschriften.PLZ, Anschriften.Ort, Ansprechpartner.Geschlecht, Ansprechpartner.Vorname, Ansprechpartner.Nachname, Kunden.Telefon FROM Kunden INNER JOIN Ansprechpartner Ansprechpartner ON Ansprechpartner.KDID = Kunden.KDID INNER JOIN Anschriften Anschriften ON Kunden.KDID = Anschriften.KDID WHERE (Kunden.Status = 0)
NilsK 3.045 Geschrieben 18. August 2011 Melden Geschrieben 18. August 2011 Moin, was soll das für einen Sinn haben? Die Logik der Datenbank besagt, dass es mehrere AP pro Kunde geben kann. Wenn du jetzt deine Kunden auswerten willst, würde die Ausgabe von "irgendeinem" AP aus der vorhandenen Liste doch irreführende Ergebnisse produzieren. Um nicht zu sagen: Es sieht ganz danach aus, als würdest du hier die falsche Datenbasis abfragen. Ansonsten: Du könntest mit einer Gruppierung nach Kunde arbeiten und für den Ansprechpartner z.B. die MAX-Funktion verwenden. Das erzeugt in dem Fall aber sehr viel Code und ist alles andere als performanceneutral. Daher gebe ich auch keinen Beispielcode dazu, weil ich nicht Schuld daran sein will, wenn bei euch plötzlich "die Datenbank langsam" ist. Gruß, Nils
mischanj 10 Geschrieben 18. August 2011 Autor Melden Geschrieben 18. August 2011 Danke erstmals für deine ausführliche Erklärung. 1.Die Abfrage ist schon richtig.Da wir nur so zu sagen für Statistik nur ein (irgendein) AP für je Kunde brauchen. 2.Mit max wollte ich testen -es hat bei mir nicht wirklich geklappt.Wahrscheinlich machte ich irgendwas falsch.Deswegen einen Beispielcode wäre sehr hilfreich. Eventuelle Performanceprobleme sind mir bewusst. Hier gibt es keine Schuldige-nur Helfer :-) Gruß mischanj
wannabee 10 Geschrieben 18. August 2011 Melden Geschrieben 18. August 2011 EDITH: falsch gelesen ;) LIMIT macht keinen sinn ....
hh2000 10 Geschrieben 20. August 2011 Melden Geschrieben 20. August 2011 Moin, falls Ihr den Ansprechpartner nicht braucht, lasst ihn doch einfach weg oder wenn die Spalte gewünscht wird, dann nimm eine Konstante wie 'APName' AS Ansprechpartner. Den ersten Anprechpartner den die Abfrage findet, bekommst du sonst mit einer korrelierenden Unterabfrage (Bei jeder Zeile der Hauptabfrage wird hier die Unterabfrage ausgeführt). z.B. SELECT KundenID, (SELECT TOP 1 APName FROM T_AP WHERE T_AP.KundenNr = T_Kunden.KundenID) FROM T_Kunden Gruß Kai
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden