Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi mehrere Datensätze in einer Zeile? (https://www.delphipraxis.net/116651-mehrere-datensaetze-einer-zeile.html)

Overclocker 3. Jul 2008 19:59

Datenbank: access • Zugriff über: ado

mehrere Datensätze in einer Zeile?
 
Hi,

folgendes Problem:

Folgendes Szenario:
Tabelle: Bestellung
Bestellnr Artikelnr
1 580
1 581
1 582
1 583
2 585
2 586



So, jetzt möcht ich sozusagen eine Abfrage machen, um in der 1. Spalte den Kundenname zu haben und in den restlichen Spalten rechts NEBENEINANDER die artikel.
Es gibt sozusagen 3 Tabellen: Kunden, Bestellungen (mit Infos wie lieferbedingungen usw., uninteressant), Artikel

So jetzt mach ich sozusagen einen query mit Joins über alle 3 Tabellen.

Ich bekomm das alles schon so hin dass ich Kundenname und die Artikelnamen habe.

Problem ist nur, dass die Datensätze alle UNTEREINANDER angezeigt werden.

Gibt es ne möglichkeit alles in einer Zeile anzuzeigen?

Ich hoffe es ist einigermaßen verständlich, ist nämlich echt komplex.

Gruß

mkinzler 3. Jul 2008 20:03

Re: mehrere Datensätze in einer Zeile?
 
Z.B. mit Subselects. Nennt man auch Pivot

Overclocker 3. Jul 2008 20:07

Re: mehrere Datensätze in einer Zeile?
 
aber mit nem subselect kann ich ja nur 1 datensatz zurückgeben oder?

was ist wenn ich eine schöne tabelle machen möchte, wo links alle kunden namen und rechts die bestellten artikel aufgelistet sind ?

mkinzler 3. Jul 2008 20:15

Re: mehrere Datensätze in einer Zeile?
 
Natürlich in Verbindung mit entsprechender Limitierung
Kunde 1.Artikel, 2. Artikel, ...

omata 3. Jul 2008 20:18

Re: mehrere Datensätze in einer Zeile?
 
Datenbank->Neu->PivotTable-Assistent

Overclocker 3. Jul 2008 20:24

Re: mehrere Datensätze in einer Zeile?
 
datenbank-neu???
Das ist ne access datenbank.


und wie meinst du das mit limitierungen???

mkinzler 3. Jul 2008 20:29

Re: mehrere Datensätze in einer Zeile?
 
Mit Limitierung meine ich den 1ersten, den ersten nach Überspringen des 1. (alos den 2.) u.s.w.
Kenne mich in Access nicht aus bei
FB wäre es
SQL-Code:
first 1
,
SQL-Code:
first 1 skip 1
, ...
bei MySQL
SQL-Code:
limit 1
,
SQL-Code:
limit 1,1
, ...
bei Interbase/FB
SQL-Code:
rows 1
,
SQL-Code:
rows 1,1
, ...

Overclocker 3. Jul 2008 20:34

Re: mehrere Datensätze in einer Zeile?
 
glaub irgendwie versteh ich das mit dem limit nicht. was bringt mir der wenn er eins weiter springt?

ausserdem geht der befehl in acces nicht :(

ist das so etwas wie TOP 10 oder sowas?

noch jemand n vorschlag bzw. ein beispiel?

omata 3. Jul 2008 20:37

Re: mehrere Datensätze in einer Zeile?
 
Neuer Versuch...

Abfrage erstellen...
Datenbank->Abfragen->Entwurfsansicht
Person.Name, Person-Produkt.ID, Produkt.Name

Kreuztabelle erstellen...
Datenbank->Abfragen->Kreuzabfrage-Assistent
- obige Abfrage auswählen, weiter
- person.name hinzufügen, weiter
- produkt.name hinzufügen, weiter
- produkt_id markieren, Anzahl auswählen, weiter
- Fertig stellen

mkinzler 3. Jul 2008 20:41

Re: mehrere Datensätze in einer Zeile?
 
Zitat:

glaub irgendwie versteh ich das mit dem limit nicht. was bringt mir der wenn er eins weiter springt?
Er springt nicht weiter, sondern liefert einen Ausschnitt des Ergebnis

Tabelle: Bestellung
Bestellnr Artikelnr
1 580
1 581
1 582
1 583
2 585
2 586

SQL-Code:
select
    distinct t1.Bestellnr,
    (select Artikelnummer from Bestellung where bestellnr = t1.Bestellnr limit 1),
    (select Artikelnummer from Bestellung where bestellnr = t1.Bestellnr limit 1,1)
    ...
from
    Bestellung t1;
liefert

1 580 581 ...
2 585 586 ...

Ydobon 4. Jul 2008 15:30

Re: mehrere Datensätze in einer Zeile?
 
Limit kennt Jet-Sql nicht, da muss man es etwas umständlich mit Top simulieren. Die Sql-Anweisung könnte auch ziemlich lang werden, bei vielen Bestellungen, und wenn man wenn man weniger als die maximale Anzahl verwendet wird das Ergebis unvollständig.

In MySql wäre es mit GROUP_CONCAT äußerst einfach, leider scheint Jet so etwas nicht zu kennen. Hier wird für Access selbst eine Funktion zu diesem Zweck angegeben, jetzt müsste man sie nur noch verwenden können.

shmia 4. Jul 2008 16:59

Re: mehrere Datensätze in einer Zeile?
 
Wozu brauchst du denn die Felder auf diese Weise angeordnet?
Willst du Drucken, Daten exportieren oder dem Benutzer im Grid anzeigen?
(einfach mal querdenken!)

Man kann das Problem auch mit Delphi (ohne SQL) lösen.
Die Abfrage auf die Bestellungen bekommt ein berechnetes Feld hinzu.
Im Event OnCalcFields benötigt man dann eine 2. Abfrage auf die Artikel. (Master-Detail-Verknüpfung)
Mit einer Schleife über die Artikeldaten verkettet man die Artikelnummern zu einen String (Nummer durch Komma getrennt) und weist das dem berechneten Feld zu.
Das ist natürlich langsamer als per SQL; aber das Problem lässt sich mit der der Jet-Engine wahrscheinlich nicht lösen.

omata 4. Jul 2008 17:22

Re: mehrere Datensätze in einer Zeile?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von shmia
Man kann das Problem auch mit Delphi (ohne SQL) lösen.


Overclocker 19. Jun 2009 21:26

Re: mehrere Datensätze in einer Zeile?
 
Hi,

jetzt steh ich vor einem ähnlichen problem, allerdings nicht mehr in access, sondern auf einem sql 2005 server.

kennt von euch jemand auch hierfür eine funktion? Group_concat etc. laufen nur auf mysql was ich darüber gefunden habe aber für TSQL habe ich noch nichts gefunden :(

wäre dankbar für eure hilfe

mkinzler 19. Jun 2009 21:36

Re: mehrere Datensätze in einer Zeile?
 
Wie gesagt nennet man Pivot oder Kreuztabelle
http://www.itrain.de/knowhow/sql/tsql/pivot/index.asp

Overclocker 19. Jun 2009 21:42

Re: mehrere Datensätze in einer Zeile?
 
ja, aber was ich irgendwie rausgelesen habe, dass es eher nicht für mein vorhaben geeignet ist.
mein ziel ist, aus diesen daten

Delphi-Quellcode:
Bestellnr Artikelnr
1 580
1 581
1 582
1 583
2 585
2 586
folgendes ergebnis zu bekommen

1 580 581 582 583
2 585 586


sozusagen 2 zeilen zu erhalten mit DYNAMISCHER spaltenanzahl, je nachdem wieviele daten vorhanden sind?!?!

mkinzler 20. Jun 2009 07:21

Re: mehrere Datensätze in einer Zeile?
 
Dann musst du die Abfrage manuell zusammenfiemeln.

Overclocker 21. Jun 2009 15:00

Re: mehrere Datensätze in einer Zeile?
 
tja das wenn ich wüsste wie ich das anstellen soll ;)

dann hätte ich ja das problem nicht, hab schon alles versucht, group concat etc. gibts ja für mysql,läuft aber nich auf tsql und für tsql habe ich bis jetzt leider echt noch nichts gescheites gefunden :(((


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 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