Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensätze zusammenfassen (https://www.delphipraxis.net/135398-datensaetze-zusammenfassen.html)

Uncle Cracker 10. Jun 2009 09:03

Datenbank: MYSQL • Zugriff über: ODBC

Datensätze zusammenfassen
 
Hallo Leute,

ich habe folgendes Problem und zwar habe ich folgendes Ergebnis nach einer SQL-Abfrage:

Vorgangsnr | Auftragsnr | Wert
123123123 | 09-0854 | abc
123123123 | 09-0854 | abc1
123123123 | 09-0854 | abc2
546456456 | 09-0899 | abc
546456456 | 09-0899 | abc1
546456456 | 09-0899 | abc2


Dies lasse ich in ein ListView ausgeben, nur sieht das nicht so schön aus, ich würde es gern so ausgeben lassen:

Vorgangsnr | Auftragsnr | Wert
123123123 | 09-0854 | abc, abc1, abc2
546456456 | 09-0899 | abc, abc1, abc2

Ist dies mit irgendeiner SQL-Anweisung möglich Daten so zusammen zufassen?


Danke

angos 10. Jun 2009 09:07

Re: Datensätze zusammenfassen
 
hi,

kannst du den jetzigen SQL einmal zeigen?

Grüße
Ansgar

nachti1505 10. Jun 2009 09:07

Re: Datensätze zusammenfassen
 
SQL-Code:
GROUP BY vorgangsnr, wert
Sry, war Schwachsinn... *dumdidum*

Uncle Cracker 10. Jun 2009 09:29

Re: Datensätze zusammenfassen
 
Naja, mit der jetzigen SQL-Anweisung könnt ihr wahrscheinlich nicht viel anfangen:

SQL-Code:
SELECT * FROM AB_AUFLAGE AB, VM_VORGANG V,KP_ECKTERMINE ECK,KP_AUFTRAG AUF,KL_KOSTENSTELLEN K,KL_MENUBEREICHE MEN,KP_GEPLANTEZEIT GEP,A_EXTNR EXT,VM_VARIABLEN VAR WHERE ECK.ECKTERMINTYP=3 AND ECK.ECKTERMIN BETWEEN 39971 AND 40000 AND V.VORGANGSNR=AB.VORGANGSNR AND V.VORGANGSNR=ECK.VORGANGSNR AND V.LI_FERTIG IS NULL AND ECK.VORGANGSNR=V.VORGANGSNR AND AUF.VORGANGSNR=ECK.VORGANGSNR AND AUF.STATUS < 2 AND ADR_INTNR=KUNDE_INTNR AND ADR_TYP=1 AND GEP.VORGANGSNR=ECK.VORGANGSNR AND K.KST_NR=GEP.KST_NR AND MEN.ECKTERMINTYP=ECK.ECKTERMINTYP AND K.MENBERNR=MEN.MENBERNR AND ADR_INTNR=KUNDE_INTNR AND VAR.VORGANGSNR (+) = V.VORGANGSNR AND VAR.VARNR (+) = 211 ORDER BY K.KST_KURZ
Wenn ich "ORDER BY" durch "GROUP BY vorgangsnr, wert" ersetze bekomme ich die Meldung: Ambiguous column reference

mkinzler 10. Jun 2009 09:52

Re: Datensätze zusammenfassen
 
SQL-Code:
select
    Vorgangsnr, Auftragsnr, GROUP_CONCAT( Wert)
where
    ...
group by
   Vorgangsnr, Auftragsnr;

f4k3 10. Jun 2009 10:03

Re: Datensätze zusammenfassen
 
Zitat:

Zitat von Uncle Cracker
Naja, mit der jetzigen SQL-Anweisung könnt ihr wahrscheinlich nicht viel anfangen:

SQL-Code:
SELECT * FROM AB_AUFLAGE AB, VM_VORGANG V,KP_ECKTERMINE ECK,KP_AUFTRAG AUF,KL_KOSTENSTELLEN K,KL_MENUBEREICHE MEN,KP_GEPLANTEZEIT GEP,A_EXTNR EXT,VM_VARIABLEN VAR WHERE ECK.ECKTERMINTYP=3 AND ECK.ECKTERMIN BETWEEN 39971 AND 40000 AND V.VORGANGSNR=AB.VORGANGSNR AND V.VORGANGSNR=ECK.VORGANGSNR AND V.LI_FERTIG IS NULL AND ECK.VORGANGSNR=V.VORGANGSNR AND AUF.VORGANGSNR=ECK.VORGANGSNR AND AUF.STATUS < 2 AND ADR_INTNR=KUNDE_INTNR AND ADR_TYP=1 AND GEP.VORGANGSNR=ECK.VORGANGSNR AND K.KST_NR=GEP.KST_NR AND MEN.ECKTERMINTYP=ECK.ECKTERMINTYP AND K.MENBERNR=MEN.MENBERNR AND ADR_INTNR=KUNDE_INTNR AND VAR.VORGANGSNR (+) = V.VORGANGSNR AND VAR.VARNR (+) = 211 ORDER BY K.KST_KURZ
Wenn ich "ORDER BY" durch "GROUP BY vorgangsnr, wert" ersetze bekomme ich die Meldung: Ambiguous column reference

mhm ... also evtl. kann ich dir die Lösung nicht auf dem Silbertablett präsentieren ... aber um deinen Code zu lesen
wäre es von Vorteil wenn du ihn auch ordentlich formatierst ... z.B. so ...

SQL-Code:
SELECT * 

FROM
  AB_AUFLAGE AB, VM_VORGANG V,KP_ECKTERMINE ECK,KP_AUFTRAG AUF,
  KL_KOSTENSTELLEN K,KL_MENUBEREICHE MEN,KP_GEPLANTEZEIT GEP,A_EXTNR EXT,
  VM_VARIABLEN VAR

WHERE
  (ECK.ECKTERMINTYP = 3)                 AND
  (ECK.ECKTERMIN BETWEEN 39971 AND 40000) AND
  (V.VORGANGSNR = AB.VORGANGSNR)         AND
  (V.VORGANGSNR = ECK.VORGANGSNR)        AND
  (V.LI_FERTIG IS NULL)                  AND
  (ECK.VORGANGSNR = V.VORGANGSNR)        AND
  (AUF.VORGANGSNR = ECK.VORGANGSNR)      AND
  (AUF.STATUS < 2)                       AND
  (ADR_INTNR = KUNDE_INTNR)              AND
  (ADR_TYP = 1)                          AND
  (GEP.VORGANGSNR = ECK.VORGANGSNR)      AND
  (K.KST_NR = GEP.KST_NR)                AND
  (MEN.ECKTERMINTYP = ECK.ECKTERMINTYP)  AND
  (K.MENBERNR = MEN.MENBERNR)            AND
  (ADR_INTNR = KUNDE_INTNR)              AND
  (VAR.VORGANGSNR (+) = V.VORGANGSNR)    AND
  (VAR.VARNR (+) = 211)

ORDER BY
  K.KST_KURZ
Ohne deine Tabellen zu kennen bin ich der Meinung dass deine Ergebnismenge, die aus dem Statement hervorgeht, größer ist als du sie überhaupt benötigst ... zumindest nach der Aussage, dass du nur die Vorgangsnummer, Auftragsnummer und den irgendeinen Wert brauchst ...

Bei deinem Statement holst du dir alle Datensätze und jedes FELD aus jeder im FROM angegebenen Tabelle. Benötigst für die Ausgabe und Überprüfung aber sicherlich nicht alle ... Ob deine Abfrage noch sonderlich performant ist wenn in jeder Tabelle sich mal ein paar huntertausend Datensätze angesammelt haben wage ich zu bezweifeln.

Alles weitere können dir bestimmt andere erklären ;)

nachti1505 10. Jun 2009 10:10

Re: Datensätze zusammenfassen
 
Zitat:

Zitat von mkinzler
SQL-Code:
...GROUP_CONCAT( Wert)...

Für welche RDMS existiert diese Funktion?

mkinzler 10. Jun 2009 10:12

Re: Datensätze zusammenfassen
 
MySQL. In FireBird heisst sie LIST(). Ob noch andere DBMS diese unterstützen weiss ich leider nicht.

DeddyH 10. Jun 2009 10:17

Re: Datensätze zusammenfassen
 
Zitat:

Zitat von mkinzler
MySQL. In FireBird heisst sie LIST(). Ob noch andere DBMS diese unterstützen weiss ich leider nicht.

Kein Wunder, dass ich auf dev.mysql.com kein Ergebnis zu LIST() bekommen habe, obwohl ich wusste, dass es da sowas gibt :lol:

Uncle Cracker 10. Jun 2009 11:34

Re: Datensätze zusammenfassen
 
Hallo,

f4k3: deine Worte habe ich mir natürlich zu Herzen genommen, hatte mir nur immer die gesamte Ergebnismenge anzeigen lassen, um zu sehen welche Daten vorhanden sind.

mkinzler: Hatte mich schon so gefreut als ich deine Lösung gesehen hatte, nur leider wird group_concat nicht/noch nicht unterstützt.

Ich werde es jetzt doch versuchen irgendwie in Delphi zulösen...Danke trotzdem für eure Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz