Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi In der Gruppe sortieren ?! (https://www.delphipraxis.net/164561-der-gruppe-sortieren.html)

handson 18. Nov 2011 09:29

Datenbank: MySQL • Version: 5.0.26 • Zugriff über: microOLAP DAC

In der Gruppe sortieren ?!
 
Hallo!

Erst einmal die Query um der es geht:

Code:
SELECT p.artnr,p.arttext,SUM(p.menge) menge,SUM(p.gesamt) gesamt,p.kurz FROM PUIS p
    INNER JOIN kunden k
      ON p.mandantenid = k.mandantenid AND
         p.kundnr = k.kundnr
      WHERE p.datum >= '2011-11-01' AND p.datum <= '2011-11-18' AND
            p.artnr >= '' AND p.artnr <= '999999'
      GROUP BY p.artnr
      ORDER BY menge DESC;
Es geht um Artikelinformationen, die in einer Liste ausgegeben werden. Ein Artikel hat diverese gleiche Einträge, die aber unterschiedlich Bezeichnungen haben. Genauer gesagt, die Bezeichnung ist in der jeweiligen Sprache übersetzt, bsp.:

ArtNr Bezeichnung ...restliche Felder
10000 Artikel Deutsch
10000 Artikel Englisch
:
:

In meiner Abfrage oben gibt es Produktinformationen aus, Umsatz und Menge. Dabei werden die Werte pro Artikelnummer mit GROUP BY zusammengefaßt und summiert. Soweit so gut.
Er soll auch die Bezeichnung ausgeben. Allerdings gibt er dort die Bezeichnung mal in Deutsch aus oder in einer anderen Sprache.
So, nun meine Frage: Kann man innerhalb so einer Gruppierung auch sortieren? Die Tabelle besitzt z.B. auch ein Feld MandantenID. Anhand dieser ID bekomme ich den Deutschen Text raus (MandantenID = 000). Mir fällt dazu leider nichts ein, jemand eine Idee?

Vielen Dank schon mal im voraus!

Gruß,
Stephan

Uwe Raabe 18. Nov 2011 09:46

AW: In der Gruppe sortieren ?!
 
Durch
Code:
GROUP BY p.artnr
werden die einzelnen Datensätze einer Artikelnummer zu einem einzigen Ausgabesatz zusammengefasst. Wenn unter derselben Artikelnummer mehrere Artikel mit unterschiedlichen Bezeichnungen ausgegeben werden sollen, muss die Gruppierung über
Code:
GROUP BY p.artnr,p.arttext
erfolgen.

handson 18. Nov 2011 10:01

AW: In der Gruppe sortieren ?!
 
Ok, aber wie gewährleiste ich denn, dass da wirklich der Deutsche Text steht?
Würde das gehen, wenn ich über die MandantenID gehe? 000 wäre Deutsch, 002 Niederländisch, 003 andere europäische Sprachen.

Wäre das dann mit

Code:
GROUP BY p.artnr,p.mandantenid
zu lösen?

Uwe Raabe 18. Nov 2011 10:06

AW: In der Gruppe sortieren ?!
 
Vielleicht habe ich ja nicht richtig verstanden, was du im Endeffekt willst bzw. wie dein Datenbestand aussieht. Um mal bei deinem Beispiel zu bleiben, bei dem Artikel 10000 in Deutsch und Englisch vorkommt: Sollen es getrennte Summen für 10000-Deutsch und 100000-Englisch geben oder brauchst die eine Summe für 10000 und für den Artikeltext soll Deutsch genommen werden?

Medium 18. Nov 2011 10:06

AW: In der Gruppe sortieren ?!
 
Sinnvoller wäres wohl aber, die Artikeldaten von den Sprachen mehr zu trennen. D.h. eine separate Tabelle "Artikelbezeichnungen" mit den Feldern "Artikelnummer, Sprache, Beschreibung", und in der eigentlichen Artikeltabelle keine Beschreibung, und die Artikelnummer unique. Über einen Join ließe sich dann explizit eine gewünschte Sprache auswählen, und fehlende Übersetzungen wären zudem sehr leicht ausfindig machbar.
Konsequenterweise müsste man eigentlich, um vor allem Verschreiber zu minimieren, die Sprache nur als ID hinterlegen, und noch eine 3. Tabelle haben, in der alle Sprachnamen mit ihren IDs gelistet ist. Böte auch schöne ComboBox-Möglichkeiten in der GUI nachher, würde aber zu einem 3-fach Join werden, für den es sich schon fast lohnen könnte, ein View einzurichten.

jobo 18. Nov 2011 10:07

AW: In der Gruppe sortieren ?!
 
Das müsstest Du ebenfalls aufnehmen als 3. Group Feld oder aber in die Where Bedingung packen und auf eine Mandanten ID(=~Sprache?) filtern.

Bummi 18. Nov 2011 10:10

AW: In der Gruppe sortieren ?!
 
Ich nehme an für die artnr gibt es eine Tabelle mit den möglichen Übersetzungen, wenn dem so ist würde ich dort die Deutsche Bezeichnung per SubSelect oder Join herausholen

Uwe Raabe 18. Nov 2011 10:18

AW: In der Gruppe sortieren ?!
 
Mal abgesehen davon, daß die Datenstruktur eher suboptimal ist, versuch doch mal diese Query (ungetestet):

Code:
SELECT p.artnr,q.arttext,SUM(p.menge) menge,SUM(p.gesamt) gesamt,p.kurz FROM PUIS p
    INNER JOIN PUIS q
      ON p.artnr = q.artnr
    INNER JOIN kunden k
      ON p.mandantenid = k.mandantenid AND
         p.kundnr = k.kundnr
      WHERE p.datum >= '2011-11-01' AND p.datum <= '2011-11-18' AND
            p.artnr >= '' AND p.artnr <= '999999' AND
            q.mandantenid = '000'
      GROUP BY p.artnr
      ORDER BY menge DESC;

handson 18. Nov 2011 10:19

AW: In der Gruppe sortieren ?!
 
Zitat:

Zitat von Bummi (Beitrag 1136824)
Ich nehme an für die artnr gibt es eine Tabelle mit den möglichen Übersetzungen, wenn dem so ist würde ich dort die Deutsche Bezeichnung per SubSelect oder Join herausholen

NATÜRLICH! Warum bin ich nicht gleich darauf gekommen? Mit einem 2. INNER JOIN auf den Artikel!
Klasse, danke. :thumb:

Code:
SELECT p.artnr,a.bezeich1,SUM(p.menge) menge,SUM(p.gesamt) gesamt,p.kurz FROM PUIS p
    INNER JOIN kunden k
      ON p.mandantenid = k.mandantenid AND
         p.kundnr = k.kundnr
    INNER JOIN artikel a
      ON a.artnr = p.artnr AND
              a.mandantenid = '000'  
    WHERE p.datum >= '2011-11-01' AND p.datum <= '2011-11-18' AND
          p.artnr >= '' AND p.artnr <= '999999'
    GROUP BY p.artnr
    ORDER BY menge DESC;
Mann-o-Mann...

Trotzdem vielen Dank auch an die anderen für die gute Unterstützung! :-D


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