AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi In der Gruppe sortieren ?!
Thema durchsuchen
Ansicht
Themen-Optionen

In der Gruppe sortieren ?!

Ein Thema von handson · begonnen am 18. Nov 2011 · letzter Beitrag vom 18. Nov 2011
Antwort Antwort
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#1

In der Gruppe sortieren ?!

  Alt 18. Nov 2011, 09:29
Datenbank: MySQL • Version: 5.0.26 • Zugriff über: microOLAP DAC
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
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.015 Beiträge
 
Delphi 12 Athens
 
#2

AW: In der Gruppe sortieren ?!

  Alt 18. Nov 2011, 09:46
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#3

AW: In der Gruppe sortieren ?!

  Alt 18. Nov 2011, 10:01
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?
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.015 Beiträge
 
Delphi 12 Athens
 
#4

AW: In der Gruppe sortieren ?!

  Alt 18. Nov 2011, 10:06
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: In der Gruppe sortieren ?!

  Alt 18. Nov 2011, 10:06
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: In der Gruppe sortieren ?!

  Alt 18. Nov 2011, 10:07
Das müsstest Du ebenfalls aufnehmen als 3. Group Feld oder aber in die Where Bedingung packen und auf eine Mandanten ID(=~Sprache?) filtern.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: In der Gruppe sortieren ?!

  Alt 18. Nov 2011, 10:10
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
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.015 Beiträge
 
Delphi 12 Athens
 
#8

AW: In der Gruppe sortieren ?!

  Alt 18. Nov 2011, 10:18
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#9

AW: In der Gruppe sortieren ?!

  Alt 18. Nov 2011, 10:19
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.

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!
Stephan Faust
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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