Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select mit SubSelect summieren (https://www.delphipraxis.net/90366-select-mit-subselect-summieren.html)

uwewo 16. Apr 2007 07:59

Datenbank: MySQL • Version: 4.11 • Zugriff über: AnyDAC

Select mit SubSelect summieren
 
Gutem Morgen,

mit folgender Abfrage, erhalte ich die Menge aller Stücklisten-Artikel die im Jahr 2007 für den Artikel 4030.012 verwendet wurden.


SQL-Code:
SELECT a.ArtNr,a.ArtBez, a.Menge * 
(
SELECT SUM(b.GutStueck)
FROM OEE_Produktion AS b
WHERE a.ArtNr = b.ArtNr
AND Year(b.Datum) = 2007
) AS Menge, a.MengenEinheit

FROM OEE_StckList AS a
WHERE a.ArtNr = '4030.012'

ORDER BY a.ArtNr
Nun meine Frage, sieht hier jemand eine Möglichkeit das ganze so zu erweitern, dass ich für alle Artikel aus der Produktionstabelle die Mengen erhalte, und diese auch summiert werden. Oder komme ich um eine zusätzliche Abfrage nicht herum?
Jeder Stücklistenartikel, kann natürlich in jedem Artikel aus der Produktionstabelle vorkommen.

NormanNG 16. Apr 2007 09:24

Re: Select mit SubSelect summieren
 
Hi,

ich kenn MySQL selbst nicht, aber evtl. geht es so:

SQL-Code:
SELECT a.ArtNr,a.ArtBez, a.Menge, SUM(b.GutStueck) AS MENGE
FROM OEE_StckList AS a
JOIN OEE_Produktion AS b on a.ArtNr = b.ArtNr
WHERE Year(b.Datum) = 2007
ORDER BY a.ArtNr

uwewo 16. Apr 2007 09:38

Re: Select mit SubSelect summieren
 
Danke Norman,

so hatte ich es auch schon versucht, allerdings erhalte ich auf diese Weise immer nur den ersten Datensatz in der Stückliste. :cry:

NormanNG 16. Apr 2007 09:43

Re: Select mit SubSelect summieren
 
Hi,

sorry, das GROUP BY fehlt natürlich

SQL-Code:
SELECT a.ArtNr,a.ArtBez, a.Menge, SUM(b.GutStueck) AS MENGE
FROM OEE_StckList AS a
JOIN OEE_Produktion AS b on a.ArtNr = b.ArtNr
WHERE Year(b.Datum) = 2007
GROUP BY a.ArtNr, a.ArtBez, a.Menge
ORDER BY a.ArtNr

uwewo 16. Apr 2007 09:52

Re: Select mit SubSelect summieren
 
Das mit GRUOP wahr schon klar, ein summieren ohne GROUP ist sowieso nicht möglich.

Leider aber wie gesagt immer nur der erste Datensatz, der Stückliste.

NormanNG 16. Apr 2007 10:02

Re: Select mit SubSelect summieren
 
Hi,

Zitat:

Das mit GRUOP wahr schon klar, ein summieren ohne GROUP ist sowieso nicht möglich.
Das ist - zumindest für MS SQL - nicht richtig.



Mit der Abfrage oben erhält man alle Zeilen aus Tabelle a, für die es mindestens eine entsprechende Zeile aus Tabelle b gibt, für die gilt: a.ArtNr=B.ArtNr und (B.Datum) in 2007. Bist du sicher, das in Tabelle b mehr Daten liegen, als ausgegeben werden?

Versuchs doch mal mit
SQL-Code:
SELECT a.ArtNr,a.ArtBez, a.Menge, Count(b.*) as ANZAHL
FROM OEE_StckList AS a
LEFT JOIN OEE_Produktion AS b on a.ArtNr = b.ArtNr and Year(b.Datum) = 2007
GROUP BY a.ArtNr, a.ArtBez, a.Menge
ORDER BY a.ArtNr
Damit bekommst du die ANZAHL der aus b passenden Zeile je Artikel...

uwewo 16. Apr 2007 12:30

Re: Select mit SubSelect summieren
 
Halo Norman,

Danke nochmal für Deinen tatkräftigen Einsatz.

Nun zum Stand der Dinge

SQL-Code:
SELECT a.ArtNr,a.ArtBez, a.Menge, Count(b.ArtNr) as ANZAHL, Sum(b.GutStueck) as Menge
FROM OEE_StckList AS a
LEFT JOIN OEE_Produktion AS b
ON a.ArtNr = b.ArtNr and Year(b.Datum) = 2007 
GROUP BY a.ArtNr, a.ArtBez, a.Menge
ORDER BY a.ArtNr
Count gibt bei der Anzahl immer 2 anstatt 1 zurück, dass wäre aber nicht schlimm denn
SUM(b.GutStueck) liefert die richtige Menge der produzierten Teile.

Allerdings wenn ich

SQL-Code:
(a.Menge * Sum(b.GutStueck)) as Gesamt
berechne fehlen zwischen 3+5 Artikel aus der Stückliste.

Das weitere und wahrscheinlich auch grössere Problem ist, dass ich die jetzt gruppierten Artikel nocheinmal gruppieren müsste damit die Artikel aus der Stückliste auch summiert werden.

Ich denke mal ich werde wohl nicht um eine weitere Abfrage, oder Temp Table herum kommen. :?

omata 16. Apr 2007 19:30

Re: Select mit SubSelect summieren
 
Hallo uwewo,

hier mal mein Vorschlag...
SQL-Code:
SELECT p.ArtNr, s.ArtBez, s.Menge, s.MengenEinheit, s.stueck
FROM OEE_Produktion p
LEFT JOIN (SELECT ArtNr, SUM(b.GutStueck) stueck
           FROM OEE_StckList
           GROUP BY ArtNr) s
  ON p.ArtNr = s.ArtNr
WHERE p.ArtNr = '4030.012'
  AND YEAR(p.datum) = 2007
ORDER BY p.ArtNr
Ich würde dir auch gern konkreter helfen, aber ich muss zugeben, dass ich aus deinen Informationen einfach nicht schlau werden. Was steht wie in deinen Tabellen und was möchtest du konkret haben?
Das zusätzliche Gruppieren sollte auch kein Problem sein. Aber ich werde aus deinen Angaben einfach nicht schlach, schade.

Gruss
Thorsten

uwewo 18. Apr 2007 07:31

Re: Select mit SubSelect summieren
 
Zitat:

Zitat von omata
Ich würde dir auch gern konkreter helfen, aber ich muss zugeben, dass ich aus deinen Informationen einfach nicht schlau werden. Was steht wie in deinen Tabellen und was möchtest du konkret haben?

Ok, hier nocheinmal zum besseren Verständnis die sehr vereinfachte Tabellen Übersicht, und mein gewünschtes Ergebnis.

Tabelle -> Produktion
ArtikelNr_Produkt, ArtikelBez_Produkt, Produzierte_Menge

Tabelle -> Stückliste
ArtikelNr_Produkt, ArtikelNr_Einzelteil, Menge_Einzeilteil

Jedes Produkt besteht aus einer Stückliste, die wiederum die Einzelteile eines Produkts enthält.

Die Tabelle Produktion enthält die Menge(in Stck) aller Produkte die produziertz wurden.
Die Stücklistentabelle besteht aus allen Einzelteilen die zu einem Produkt gehören, Mengenangabe(Stück, kg) etc.

z.B.
ProduktionTabelle
ArtikelNr_Produkt | ArtikelBez_Produkt | Produzierte_Menge
4030.012 | Test | 1200
6070.016 | Test2 | 600
4030.012 | Test | 200

produzierte Menge des Produkt 4030.012 = 1400
produzierte Menge des Produkt 6070.016 = 600

StücklistenTabelle
ArtikelNr_Produkt | ArtikelNr_Einzelteil | Menge_Einzeilteil
4030.012 | 1000 | 0.5
4030.012 | 1001 | 0.5
4030.012 | 1002 | 1
6070.016 | 1000 | 1

somit besteht Produkt 4030.012 aus 3 Einzelteilen und zwar 1000, 1001, 1002 nun möchte ich die Gesamtmenge aller Einzelteile berechnen. Das wäre in diesem Fall:

für Produkt 4030.012 und Einzelteil-Nr. 1000 | 1400 Stück * 0.5 = 700
für Produkt 6070.016 und Einzelteil-Nr. 1000 | 600 Stück * 1 = 600
Gesamtmenge für Einzelteil-Nr. 1000 = 1300

Also wie gesagt ich möchte die Summe aller Einzelteile, von den Summen aller Produkte.
Wobei jedes Produkt teilweise aus unterschiedlichen Einzelteilen bestehen kann.

omata 18. Apr 2007 22:10

Re: Select mit SubSelect summieren
 
Ok, so verstehe ich was du haben möchtest.

Hier mein Vorschlag...
SQL-Code:
SELECT teilnr, SUM(multiplikant) summe
FROM (SELECT teilnr, x.menge * y.menge AS multiplikant
      FROM (SELECT artnr, SUM(menge) menge
            FROM oee_produktion
            GROUP BY artnr) x
      INNER JOIN oee_stcklist y
        ON x.artnr = y.artnr) x
GROUP BY teilnr
Edit: ich habe das mit MySQL 5 getestet. Ob das auch schon mit 4.11 geht weiss ich nicht.

Gruss
Thorsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 Uhr.
Seite 1 von 2  1 2      

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