![]() |
Datenbank: MySQL • Version: 5.0.26 • Zugriff über: microOLAP DAC
In der Gruppe sortieren ?!
Hallo!
Erst einmal die Query um der es geht:
Code:
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.:
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; 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 |
AW: In der Gruppe sortieren ?!
Durch
Code:
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
GROUP BY p.artnr
Code:
erfolgen.
GROUP BY p.artnr,p.arttext
|
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:
zu lösen?
GROUP BY p.artnr,p.mandantenid
|
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?
|
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. |
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.
|
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
|
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; |
AW: In der Gruppe sortieren ?!
Zitat:
Klasse, danke. :thumb:
Code:
Mann-o-Mann...
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; Trotzdem vielen Dank auch an die anderen für die gute Unterstützung! :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz