Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   query anpassen, geht das ? (https://www.delphipraxis.net/152947-query-anpassen-geht-das.html)

khh 14. Jul 2010 10:27

Datenbank: firebird • Version: 2.1 • Zugriff über: zeos

query anpassen, geht das ?
 
hallo zusammen,

ich habe eine query :
hier auf die relevanten Felder gekürzt
SQL-Code:

select p.liefermenge as liefermenge,
 art.bezeichnung1, vklieferung_id
 from vkaufkopf as a,
 vkaufpos as p,
 artikel as art
 where a.vkaufkopf_id = p.vkaufkopf_id
 and p.art_id = art.artikel_id
 order by a.lieferdatum,kunden_id, artikel_id,vklieferung_id;

die mir folgendes Ergebnis liefert:
Code:
LIEFERMENGE   BEZEICHNUNG1   VKLIEFERUNG_ID
200   Brötchen                  1
500   Brötchen                  2
300   Brötchen                  3
8   Brezel                          3
50   Bauernbrot 750g                  2
50   Bauernbrot 750g                  4
8   Bauernbrot 1,5kg          1
8   Bisquitböden                  2
5   Aprikosenstreusel/Blech          1
gibts ne möglichkeit per SQL die Daten so zusammnzufassen, dass in dem Beispiel die ersten 3 Zeilen als eine Zeile zurückgegeben werden?

Oder muss ich das programtechnisch lösen?

Danke für eure Ideen.

8 Aprikosenstreusel/Blech 4
5 Baguettebrötchen 4

mkinzler 14. Jul 2010 10:41

AW: query anpassen, geht das ?
 
Ja, nennt man Gruppierung:
SQL-Code:
select
    sum(p.liefermenge) as liefermenge,
    art.bezeichnung
 from
    vkaufkopf as a,
    vkaufpos as p,
    artikel as art
 where
    a.vkaufkopf_id = p.vkaufkopf_id
    and p.art_id = art.artikel_id
 order by
    a.lieferdatum,kunden_id, artikel_id,vklieferung_id
group by
    art.bezeichnung;

himitsu 14. Jul 2010 10:42

AW: query anpassen, geht das ?
 
GROUP BY

Das würde aber mit der VKLIEFERUNG_ID Probleme geben, also diese kannst du dann nicht mehr richtig ausgeben, da sie sich ja unterscheiden.


[edit]
Och menn, wo kommt denn MK plötzlich her? :shock:
(da weiß man endlich och mal was und dann :cry: )

khh 14. Jul 2010 11:41

AW: query anpassen, geht das ?
 
Zitat:

Zitat von himitsu (Beitrag 1035230)
GROUP BY

group by kenn ich schon ;-)
bring aber nicht das gewünschte Ergebnis
ich brauchs so:

brötchen Lieferung1 200 lieferung2 300 lieferung3 200
Brot Lieferung1 100 Lieferung2 50 Lieferung3 120

mkinzler 14. Jul 2010 11:54

AW: query anpassen, geht das ?
 
In der Frage steht es aber anders.
Welches DBMS? Manche kennen eine Listen-Aggegatsfunktion. Sonst musst du dass selber zusammenbasteln

Blup 14. Jul 2010 12:00

AW: query anpassen, geht das ?
 
Wenn es sich um eine feste maximale Anzahl von Spalten handelt, kann man so etwas mit einer StoredProcedure realisieren. Aber die Aufgabe der Datenbank ist das eigentlich nicht, die soll Daten schnell und effektiv bereitstellen. Schaff dir Datenobjekte/Strukturen für die gewünschte Darstellungsform, die dann mit einer simplen Abfrage gefüllt werden.

khh 14. Jul 2010 12:00

AW: query anpassen, geht das ?
 
Zitat:

Zitat von mkinzler (Beitrag 1035252)
In der Frage steht es aber anders.
Welches DBMS? Manche kennen eine Listen-Aggegatsfunktion. Sonst musst du dass selber zusammenbasteln

sorry wenn ich mich im Ausganspost falsch ausgedrückt habe.

Wie gesagt firebird 1.2 zugriff über zeos.

khh 14. Jul 2010 12:03

AW: query anpassen, geht das ?
 
Zitat:

Zitat von Blup (Beitrag 1035255)
Schaff dir Datenobjekte/Strukturen für die gewünschte Darstellungsform, die dann mit einer simplen Abfrage gefüllt werden.


Das wäre natürlich optimal, lässt sich aber leider nicht umsetzen.

Die Anforderungen in einem anderen Fall sind wieder andere, und ich kann nicht für jede spezielle Anforderung eine andere DB-Struktur verwenden.

mkinzler 14. Jul 2010 12:07

AW: query anpassen, geht das ?
 
Bei FireBird geht das:
SQL-Code:
select
    art.bezeichnung,
    LIST( 'Lieferung ' || VKLIEFERUNG_ID || ' ' || p.liefermenge, ' ') as liefermenge,
 from
    vkaufkopf as a,
    vkaufpos as p,
    artikel as art
 where
    a.vkaufkopf_id = p.vkaufkopf_id
    and p.art_id = art.artikel_id
 order by
    a.lieferdatum,kunden_id, artikel_id,vklieferung_id
group by
    art.bezeichnung;

khh 14. Jul 2010 12:21

AW: query anpassen, geht das ?
 
Zitat:

Zitat von mkinzler (Beitrag 1035261)
Bei FireBird geht das:
SQL-Code:
select
    art.bezeichnung,
    LIST( 'Lieferung ' || VKLIEFERUNG_ID || ' ' || p.liefermenge, ' ') as liefermenge,
 from
    vkaufkopf as a,
    vkaufpos as p,
    artikel as art
 where
    a.vkaufkopf_id = p.vkaufkopf_id
    and p.art_id = art.artikel_id
 order by
    a.lieferdatum,kunden_id, artikel_id,vklieferung_id
group by
    art.bezeichnung;


Viiiielen Dank,euch allen,und besonders mkinzler
es funktioniert .-)


Gruss KH


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