Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-ADS : Ergebnis mehrerer Zeilen in 1 Zeile zusammenfassen (https://www.delphipraxis.net/55041-sql-ads-ergebnis-mehrerer-zeilen-1-zeile-zusammenfassen.html)

Pfoto 15. Okt 2005 15:52

Datenbank: Absolute Database • Version: 7.1 • Zugriff über: Local ADS

SQL-ADS : Ergebnis mehrerer Zeilen in 1 Zeile zusammenfassen
 
Hallo zusammen,

ich versuche seit ein paar Tagen herauszufinden, ob es in SQL die Möglichkeit gibt, den Inhalt bestimmter Zeilen zu einer Zeile zusammenzufassen. :?

Hier mal genauer:


So sieht quasi mein Query-Result aus:

Stichwort | BildID
===================
Stichwort1 | Bild 1
Stichwort2 | Bild 1
Stichwort3 | Bild 1
Stichwort2 | Bild 2
Stichwort4 | Bild 2

In dem Beispiel zeigt die Query, welches Bild welche Stichwörter zugewiesen bekommen hat. Soweit so gut. Aber wenn ich diese Stichwöter nun möglichst schnell anzeigen lassen will, müsste ich jede Zeile durchgehen und herausfinden, welches Stichwort zu welchem Bild gehört.

Mit GROUP oder DISTINCT kann ich zwar doppelte Einträge herausnehmen, aber ich suche eine Möglichkeit, automatisch den Inhalt der Spalte "Stichwort" in die per GROUP oder DISTINCT reduzierte Zeile einzulesen (separiert dann z.B. durch ein Komma)

Also etwa so:
SELECT *, GesuchteFunktion(Stichwort) FROM Query GROUP BY BildID

Ergebnis sollte dann so aussehen:

Stichwort | BildID
===================
Stichwort1, Stichwort2, Stichwort3 | Bild 1
Stichwort2, Stichwort4 | Bild 2


Gibt es eine solche Funktion im ADS? Leider finde ich nichts in der Hilfe, auch weil ich nicht richtig weiß, unter welchem Oberbegriff ich das Ganze suchen soll.


Wäre toll, wenn jemand eine solche Funktion kennt (oder natürlich eine andere Möglichkeit)

Gruß
Pfoto

omata 15. Okt 2005 23:46

Re: SQL-ADS : Ergebnis mehrerer Zeilen in 1 Zeile zusammenfa
 
Hallo,

dass was du vorhast möchte ich auch schon lange haben.

In SQL gibt es keinen Befehl, der sowas kann.
Ich kenne Absolute Database nicht, ich arbeite mit MSSQL2000. Dort kann man endlich benutzdefinierte Funktionen schreiben, die wie du das möchtest in einem SQL-Statement eingebaut werden können und die dann für jede Zeile aufgerufen werden.
Wenn ich sowas mache, dann möchte ich natürlich eine ordentlich Lösung haben. Eine zufriedenstellende Möglichkeit währe allerdings nur dann vorhanden, wenn man das SQL-Statement, dass den Inhalt der Ergebniszeile liefert, als Parameter übergeben könnte. Da liegt dann leider auch das Problem bei MSSQL, in benutzerdefinierten Funktionen gibt es nämlich keine temporären Tabellen. Deshalb gibt es aus meiner Sicht bis jetzt (bei MSSQL) nur die Möglichkeit, immer eine spezielle Funktionen zuschreiben, bei der das SQL-Statement fest ist.

Also, ich lasse mich sehr gern eines besseren belehren. Aber ich bin der Meinung, das es leider nicht geht, was du da vorhast.

MfG
Thorsten

Jasocul 16. Okt 2005 11:53

Re: SQL-ADS : Ergebnis mehrerer Zeilen in 1 Zeile zusammenfa
 
Das dürfte nur mit einer DB-Function (ähnlich wie eine SP) gehen, die dir das gesammelte Ergebnis zurück gibt. Habe ich auch schon gemacht. Allerdings muss die DB das unterstützen.

marabu 16. Okt 2005 12:55

Re: SQL-ADS : Ergebnis mehrerer Zeilen in 1 Zeile zusammenfa
 
Hallo Pfoto,

der SQL Standard sieht eine solche Funktion nicht vor. MySQL bietet dir zu diesem Zweck die Aggregat-Funktion GROUP_CONCAT an. ADS zielt ohne SP und UDF wohl mehr auf Kunden, die einen Ersatz für die BDE suchen. Wenn Denormalisierung eine wichtige Anforderung von dir ist, dann musst du dich bei NF2-Datenbanken umschauen.

Grüße vom marabu

joachimd 17. Okt 2005 11:47

Re: SQL-ADS : Ergebnis mehrerer Zeilen in 1 Zeile zusammenfa
 
Zitat:

Zitat von marabu
ADS zielt ohne SP und UDF wohl mehr auf Kunden, die einen Ersatz für die BDE suchen.

Was heisst hier ohne SP? Die SP bei ADS (Advantage Extended Procedures - AEP genannt) sind sogar noch weit mächtiger, da Du sie auch in Delphi programmieren kannst.

Aber wie schon geschrieben: In ANSI-SQL ist dafür nichts vorgesehen, aber mit einem SQL Script ist das ganze recht einfach lösbar.

Union 17. Okt 2005 12:05

Re: SQL-ADS : Ergebnis mehrerer Zeilen in 1 Zeile zusammenfa
 
Zitat:

Zitat von joachimd
Zitat:

Zitat von marabu
ADS zielt ohne SP und UDF wohl mehr auf Kunden, die einen Ersatz für die BDE suchen.

Was heisst hier ohne SP? Die SP bei ADS (Advantage Extended Procedures - AEP genannt) sind sogar noch weit mächtiger, da Du sie auch in Delphi programmieren kannst.

Aber wie schon geschrieben: In ANSI-SQL ist dafür nichts vorgesehen, aber mit einem SQL Script ist das ganze recht einfach lösbar.

Er meint aber nicht den Advantage Database Server mit ADS sondern Absolute Database :warn:

joachimd 17. Okt 2005 12:09

Re: SQL-ADS : Ergebnis mehrerer Zeilen in 1 Zeile zusammenfa
 
Zitat:

Zitat von Union
Er meint aber nicht den Advantage Database Server mit ADS sondern Absolute Database :warn:

Nö. Er meint schon ADS - ich habe diese Anfrage heute per mail ans Supportpostfach bekommen ;)

marabu 17. Okt 2005 17:06

Re: SQL-ADS : Ergebnis mehrerer Zeilen in 1 Zeile zusammenfa
 
Missverständnisse über Missverständnisse...

Zitat:

Zitat von joachimd
Nö. Er meint schon ADS - ich habe diese Anfrage heute per mail ans Supportpostfach bekommen ;)

ich meinte Absolute Database - passend zur Angabe "Datenbank: Absolute Database" im Eröffnungsbeitrag - und habe fälschlicherweise "Server" ergänzt und das Akronym ADS gebildet. Man möge mir verzeihen, wenn ich damit die Namensrechte für den "Advantage Database Server" verletzt habe. Ich wollte dieses Produkt gewiss nicht diffamieren.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:30 Uhr.

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