Fraggla Geschrieben 10. November 2011 Teilen Geschrieben 10. November 2011 Hi, komme hier atm nicht weiter In einer Tabelle von uns, soll ich folgende Aufgabe lösen: In der Liste stehen Rechnungskundennummer Kundennummer Abteilung und Debitorenkonto. Eine Rechnungskundennummer kann mehrere Kunden + Debitorenkontonummern haben, muss sie aber nicht. Aufgabe: Alle Spalten anzeigen, wo nur die Rechnungskundennummern vorkommen, die mehrere Kundennummern usw. haben. Bisherige Lösung: Verdichten, in eine seperate Tabelle ausgeben, Join = fertig. Das soll jetzt allerdings alles in einer Abfrage geregelt werden. Hab leider keinen Plan wie ich das anstellen soll.... Bisherige Lösungsansätze: SELECT dt2.fir, dt2.REKD, dt2.KDNR, dt2.ABTL, dt2.DBKT FROM usr/tekda dt2 WHERE EXISTS ( SELECT kda.FIR, kda.REKD FROM usr/tekda kda WHERE EXISTS ( SELECT dt1.fir, dt1.rekd, count(*) FROM usr/tekda dt1 WHERE dt1.fir = kda.fir AND dt1.REKD = kda.REKD GROUP by dt1.fir, dt1.rekd HAVING count(*) <> 1 )) Liefert leider alle Werte zurück. Sämtliche weitere Versuche führen zu syntaktischen Problemen usw. Wäre schön wenn mir hier jemand die Lösung verraten könnte. Mfg Fraggla Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FISI from Hell Geschrieben 10. November 2011 Teilen Geschrieben 10. November 2011 (bearbeitet) Bisherige Lösungsansätze: SELECT dt2.fir, dt2.REKD, dt2.KDNR, dt2.ABTL, dt2.DBKT -> * FROM usr/tekda dt2 WHERE EXISTS ( SELECT kda.FIR, kda.REKD FROM usr/tekda kda WHERE EXISTS ( SELECT dt1.fir, dt1.rekd, count(*) FROM usr/tekda dt1 WHERE dt1.fir = kda.fir -> Ist ein und die selbe Tabelle AND dt1.REKD = kda.REKD -> siehe oben GROUP by dt1.fir, dt1.rekd HAVING count(*) <> 1 )) -> Das es mehrere sein sollen, reicht >1 Das wird also zu: SELECT fir, rekd FROM usr/tekda Group by fir, rekd HAVING count(*) > 1 * so nicht möglich. Bearbeitet 10. November 2011 von FISI from Hell Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Fraggla Geschrieben 10. November 2011 Autor Teilen Geschrieben 10. November 2011 Nope sorry, funzt so nicht. Ich poste mal zum Verständnis den ungewünschten Lösungsweg über 3 Abfragen: 1. Verdichtung, damit gezählt werden kann: SELECT FIR, REKD, DBKT FROM usr/tekda kda GROUP by FIR, REKD, DBKT order by FIR, REKD, DBKT wird in tekdas1 gespeichert einschränken auf mehrere werte: select fir, rekd, count(*) from usr/tekdas1 GROUP by fir, rekd having count(*) <> 1 ORDER by fir, rekd Und schließlich die Fertigstellung SELECT kda.FIR, kda.REKD, kda.KDNR, kda.ABTL, kda.DBKT FROM usr/tekda kda right outer join usr/jointest tes on kda.FIR = tes.FIR and kda.REKD = tes.REKD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 10. November 2011 Teilen Geschrieben 10. November 2011 Da wir die ganzen Details ja gerade schon im Chat geklärt hatten, probier es mal mit folgendem: SELECT FIR, REKD, KDNR, ABTL, DBKT FROM usr/tekda WHERE REKD IN( SELECT REKD FROM usr/tekda GROUP BY REKD HAVING count(KDNR) > 1 OR count(DBKT) > 1 ) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Fraggla Geschrieben 10. November 2011 Autor Teilen Geschrieben 10. November 2011 Bist n Schatz. Dank dir Hab noch n Order By drunter gemacht, und jetzt ist es mit sicherheit die schönste Liste aller Listen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Fraggla Geschrieben 11. November 2011 Autor Teilen Geschrieben 11. November 2011 Musterlösung: WITH KDA as (SELECT fir, rekd, dbkt from usr/tekda GROUP by fir, rekd, dbkt ORDER by fir, rekd, dbkt) , KD1 as (SELECT fir, rekd, count(*) Anz_Deb from KDA GROUP by fir, kda.rekd HAVING count(*) <> 1 ORDER by fir, kda.rekd) SELECT kd2.fir, kd2.rekd, kd2.kdnr, kd2.abtl, kd2.dbkt FROM KD1, USR/TEKDA kd2 where kd1.fir = kd2.fir and kd1.rekd = kd2.rekd ORDER by kd2.fir, kd2.rekd, kd2.kdnr, kd2.abtl, kd2.dbkt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.