Veröffentlicht 10. November 201113 j 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
10. November 201113 j 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 201113 j von FISI from Hell
10. November 201113 j Autor 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
10. November 201113 j 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 )
10. November 201113 j Autor Bist n Schatz. Dank dir Hab noch n Order By drunter gemacht, und jetzt ist es mit sicherheit die schönste Liste aller Listen.
11. November 201113 j Autor 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.