SQL Kunden sollen nur einmal ausgegeben werden

ok, dann muss man das nochmal zusätzlich schachteln
ich probiere mal was...
Ergänzung ()

So jetzt aber:

SELECT T_KND.Nummer AS 'Kundennummer', Max(T_PRJ.Nummer) AS 'Projektnummer',
Max(T_PRJ.PROJEKTSTATUS) AS 'Projektstatus', Max(T_PRJ.DATUM) AS 'Projektdatum'
FROM T_KND, T_PRJ
WHERE T_PRJ.Mandant_ID = '1'
AND T_KND.Mandant_ID = T_PRJ.Mandant_ID
AND T_KND.Nummer = T_PRJ.KUNDENNummer
AND T_PRJ.PROJEKTSTATUS = 'Abgeschlossen'
AND T_PRJ.DATUM < '15.09.2010'
AND T_KND.Nummer IN (
SELECT T_KND.Nummer FROM (
SELECT T_KND.Nummer,T_PRJ.PROJEKTSTATUS
FROM T_KND, T_PRJ
WHERE T_PRJ.Mandant_ID = '1'
AND T_KND.Mandant_ID = T_PRJ.Mandant_ID
AND T_KND.Nummer = T_PRJ.KUNDENNummer
GROUP BY T_KND.Nummer,T_PRJ.PROJEKTSTATUS
) AS A
GROUP BY A.Nummer
HAVING COUNT(A.Nummer) = 1
)
GROUP BY T_KND.Nummer


Das sollte jetzt nur die Kunden ausgeben die nur einen Projektstatus haben...
 
Zuletzt bearbeitet:
Danke für deine Mühe, aber ich habe das jetzt schon außerhalb von SQL umgesetzt.
Nimm es mir bitte nicht übel, aber ich hatte nicht die Zeit, mich so lange auf ein Problem zu versteifen.

Wir bekommen aber beide dasselbe Ergebnis raus. :)


Edit: Ich habe aber noch was, was eher einfach sein sollte, ich aber trotzdem nicht auf das Ergebnis komme.

Ich möchte jetzt alle Kunden anzeigen lassen, denen kein Projekt zugeordnet ist und vor einem gewissen Datum angelegt wurden.
Code:
SELECT T_KND.Nummer, T_KND.ANLAGEDATUM
FROM T_KND, T_PRJ
WHERE T_PRJ.Mandant_ID = '1'
  AND T_KND.Mandant_ID = T_PRJ.Mandant_ID
  AND NOT(T_KND.Nummer = T_PRJ.KUNDENNummer)
ORDER BY T_PRJ.KUNDENNummer
Das bringt es ja nicht, weil er mir schlicht alles anzeigt, was dem Kunden nicht zugeordnet ist.
 
Zuletzt bearbeitet:
hab ich kein Problem mit :)

ok also wenn ich es recht verstanden habe, suchst du alle Datensätze der Kundentebelle, die keine Zuordnung in der Projekttabelle haben.
Würde ich mit einem Left Join probieren:


SELECT T_KND.Nummer, T_KND.ANLAGEDATUM
FROM T_KND LEFT JOIN T_PRJ ON
T_KND.Mandant_ID = T_PRJ.Mandant_ID AND
T_KND.Nummer = T_PRJ.KUNDENNummer AND
T_KND.Mandant_ID = '1'
WHERE T_PRJ.KUNDENNummer IS NULL
AND T_KND.ANLAGEDATUM < 'TT.MM.JJJJ'
ORDER BY T_KND.Nummer
 
Zuletzt bearbeitet:
Das ist das, was ich mir zusammengebastelt habe.
Code:
SELECT T_KND.Nummer, T_KND.ANLAGEDATUM
FROM T_KND
WHERE T_KND.Mandant_ID = '1'
  AND T_KND.ANLAGEDATUM < '15.09.2010'
  AND NOT T_KND.Nummer IN (
                           SELECT T_KND.Nummer
                           FROM T_PRJ, T_KND
                           WHERE T_KND.Mandant_ID = '1'
                             AND T_KND.Mandant_ID = T_PRJ.Mandant_ID
                             AND T_KND.Nummer = T_PRJ.KUNDENNummer
                          )
ORDER BY T_KND.Nummer
Unsere beiden Abfragen, liefern leicht verschiedene Ergebnisse. Warum?
Ich nehme an, deine Abfrage ist korrekt (sie sieht für mich danach aus).
 
Deine Lösung findet mehr Karteileichen. Warum er das bei meiner Lösung nicht macht, ist mir auch nicht ganz verständlich.
Nun ja, deine Lösung habe ich eingebaut. Vielen Dank für deine umfassende Hilfe. :)
 
Zurück
Oben